﻿using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.Net;
using System.Text;
using System.Web;
using BackstageMusiciansFriend;
using WebMsgBoxNamespace;
using DBMethodsNamespace;
using VariablesGlobalesNamespace;
using System.Web.UI.WebControls;
using System.Web.UI;
using ControlUsuarioWebNamespace;
using ControlImportacionNamespace;
using System.Threading;
using ControlTareaPendienteNamespace;
using AjaxPro;
using ControlSesionNamespace;
using ControlLogNamespace;
using ControlCompetenciaNamespace;
using ControlModificacionDePreciosNamespace;

namespace WebSolution
{


    #region Control de la pagina
    public partial class _Default : System.Web.UI.Page
    {

        string _sToken;
        static Product[] prod_exportacion;
        static ProductML[] prod_publicacion;
        static TinyProd[] prod_grilla;

        static int iCantPublicacion = 0;
        ControlUsuarioWeb objUsuarioWeb = new ControlUsuarioWeb();


        #region Ajax Methods

        [AjaxPro.AjaxMethod]
        public string actualizarEstadosTareasPendientesImportaciones()
        {


            DBMethods objConnection = new DBMethods();
            string strUserName = "";



            try
            {
                if (ControlSesion.session("estadoTareasImportacion") == null)
                {
                    return "       <b> No hay tareas de importacion pendientes </b> - " + System.DateTime.Now.Day.ToString().PadLeft(2, '0') + "-" + System.DateTime.Now.Month.ToString().PadLeft(2, '0') + "-" + System.DateTime.Now.Year.ToString() + "  " + System.DateTime.Now.Hour.ToString().PadLeft(2, '0') + ":" + System.DateTime.Now.Minute.ToString().PadLeft(2, '0') + ":" + System.DateTime.Now.Second.ToString().PadLeft(2, '0');
                }
                else
                {

                    if (ControlSesion.session("estadoTareasImportacion").Length != 0)
                    {
                        //        ControlLog.writeLog("[actualizarEstadosTareasPendientesImportaciones] AJAX Ok (" + ControlSesion.session("estadoTareasImportacion").Length.ToString() + ") " + ControlSesion.session("estadoTareasImportacion"));
                        return ControlSesion.session("estadoTareasImportacion");
                    }
                    else
                    {
                        ControlLog.writeLog("[actualizarEstadosTareasPendientesImportaciones] AJAX Eco");
                        return "AJAX Eco. Usuario:" + strUserName + " - " + System.DateTime.Now.ToString();
                    }

                }
            }
            catch (Exception ex)
            {
                ControlLog.writeLog("[actualizarEstadosTareasPendientesImportaciones] Excepcion 2:" + ex.Message);
                return ex.Message;
            }
        }

        [AjaxPro.AjaxMethod]
        public string actualizarEstadosTareasPendientesModDePrecios()
        {


            DBMethods objConnection = new DBMethods();
            string strUserName = "";



            try
            {
                if (ControlSesion.session("estadoTareasModDePrecios") == null)
                {
                    return "       <b> No hay tareas de modificacion de precios pendientes </b> - " + System.DateTime.Now.Day.ToString().PadLeft(2, '0') + "-" + System.DateTime.Now.Month.ToString().PadLeft(2, '0') + "-" + System.DateTime.Now.Year.ToString() + "  " + System.DateTime.Now.Hour.ToString().PadLeft(2, '0') + ":" + System.DateTime.Now.Minute.ToString().PadLeft(2, '0') + ":" + System.DateTime.Now.Second.ToString().PadLeft(2, '0');
                }
                else
                {

                    if (ControlSesion.session("estadoTareasModDePrecios").Length != 0)
                    {
                        //        ControlLog.writeLog("[actualizarEstadosTareasPendientesImportaciones] AJAX Ok (" + ControlSesion.session("estadoTareasImportacion").Length.ToString() + ") " + ControlSesion.session("estadoTareasImportacion"));
                        return ControlSesion.session("estadoTareasModDePrecios");
                    }
                    else
                    {
                        ControlLog.writeLog("[actualizarEstadosTareasPendientesModDePrecios] AJAX Eco");
                        return "AJAX Eco. Usuario:" + strUserName + " - " + System.DateTime.Now.ToString();
                    }

                }
            }
            catch (Exception ex)
            {
                ControlLog.writeLog("[actualizarEstadosTareasPendientesModDePrecios] Excepcion 2:" + ex.Message);
                return ex.Message;
            }
        }


        [AjaxPro.AjaxMethod]
        public string actualizarEstadosTareasPendientesPublicaciones()
        {


            DBMethods objConnection = new DBMethods();
            string strUserName = "";



            try
            {
                if (ControlSesion.session("estadoTareasPublicacion") == null)
                {
                    return "       <b> No hay tareas de publicacion pendientes </b> - " + System.DateTime.Now.Day.ToString().PadLeft(2, '0') + "-" + System.DateTime.Now.Month.ToString().PadLeft(2, '0') + "-" + System.DateTime.Now.Year.ToString() + "  " + System.DateTime.Now.Hour.ToString().PadLeft(2, '0') + ":" + System.DateTime.Now.Minute.ToString().PadLeft(2, '0') + ":" + System.DateTime.Now.Second.ToString().PadLeft(2, '0');
                }
                else
                {

                    if (ControlSesion.session("estadoTareasPublicacion").Length != 0)
                    {
                        //                ControlLog.writeLog("[actualizarEstadosTareasPendientesPublicaciones] AJAX Ok (" + ControlSesion.session("estadoTareasPublicacion").Length.ToString() + ") " + ControlSesion.session("estadoTareasPublicacion"));
                        return ControlSesion.session("estadoTareasPublicacion");
                    }
                    else
                    {
                        ControlLog.writeLog("[actualizarEstadosTareasPendientesPublicaciones] AJAX Eco");
                        return "AJAX Eco. Usuario:" + strUserName + " - " + System.DateTime.Now.ToString();
                    }

                }
            }
            catch (Exception ex)
            {
                ControlLog.writeLog("[actualizarEstadosTareasPendientesPublicaciones] Excepcion 2:" + ex.Message);
                return ex.Message;
            }
        }

        [AjaxPro.AjaxMethod]
        public string actualizarEstadosTareasPendientesCrearCompetidor()
        {


            DBMethods objConnection = new DBMethods();
            string strUserName = "";



            try
            {
                if (ControlSesion.session("estadoTareasCrearCompetidor") == null)
                {
                    return "       <b> No hay tareas de creacion de competidor pendientes </b> - " + System.DateTime.Now.Day.ToString().PadLeft(2, '0') + "-" + System.DateTime.Now.Month.ToString().PadLeft(2, '0') + "-" + System.DateTime.Now.Year.ToString() + "  " + System.DateTime.Now.Hour.ToString().PadLeft(2, '0') + ":" + System.DateTime.Now.Minute.ToString().PadLeft(2, '0') + ":" + System.DateTime.Now.Second.ToString().PadLeft(2, '0');
                }
                else
                {

                    if (ControlSesion.session("estadoTareasCrearCompetidor").Length != 0)
                    {

                        //          ControlLog.writeLog("[actualizarEstadosTareasPendientesCrearCompetidor] AJAX Ok (" + ControlSesion.session("estadoTareasCrearCompetidor").Length.ToString() + ") " + ControlSesion.session("estadoTareasCrearCompetidor"));
                        return ControlSesion.session("estadoTareasCrearCompetidor");
                    }
                    else
                    {
                        ControlLog.writeLog("[actualizarEstadosTareasPendientesCrearCompetidor] AJAX Eco");
                        return "AJAX Eco. Usuario:" + strUserName + " - " + System.DateTime.Now.ToString();
                    }

                }
            }
            catch (Exception ex)
            {
                ControlLog.writeLog("[actualizarEstadosTareasPendientesCrearCompetidor] Excepcion 2:" + ex.Message);
                return ex.Message;
            }
        }

        [AjaxPro.AjaxMethod]
        public string actualizarEstadosTareasPendientesAnalizarCompetidor()
        {


            DBMethods objConnection = new DBMethods();
            string strUserName = "";



            try
            {
                if (ControlSesion.session("estadoTareasAnalizarCompetidor") == null)
                {
                    return "       <b> No hay tareas de analisis de competidor pendientes </b> - " + System.DateTime.Now.Day.ToString().PadLeft(2, '0') + "-" + System.DateTime.Now.Month.ToString().PadLeft(2, '0') + "-" + System.DateTime.Now.Year.ToString() + "  " + System.DateTime.Now.Hour.ToString().PadLeft(2, '0') + ":" + System.DateTime.Now.Minute.ToString().PadLeft(2, '0') + ":" + System.DateTime.Now.Second.ToString().PadLeft(2, '0');
                }
                else
                {

                    if (ControlSesion.session("estadoTareasAnalizarCompetidor").Length != 0)
                    {
                        //             ControlLog.writeLog("[actualizarEstadosTareasPendientesAnalizarCompetidor] AJAX Ok (" + ControlSesion.session("estadoTareasAnalizarCompetidor").Length.ToString() + ") " + ControlSesion.session("estadoTareasAnalizarCompetidor"));
                        return ControlSesion.session("estadoTareasAnalizarCompetidor");
                    }
                    else
                    {
                        ControlLog.writeLog("[actualizarEstadosTareasPendientesAnalizarCompetidor] AJAX Eco");
                        return "AJAX Eco. Usuario:" + strUserName + " - " + System.DateTime.Now.ToString();
                    }

                }
            }
            catch (Exception ex)
            {
                ControlLog.writeLog("[actualizarEstadosTareasPendientesAnalizarCompetidor] Excepcion 2:" + ex.Message);
                return ex.Message;
            }
        }

        #endregion

        protected void Page_Load(object sender, EventArgs e)
        {
            #region AJAX EVENTS
            AjaxPro.Utility.RegisterTypeForAjax(typeof(_Default));
            //  if (Request.Headers["IsLookup"] != null)
            //{

            string strCommand, strParameter;

            try
            {
                if (Request.Form["command"] != null && Request.Form["parameter"] != null)
                {
                    strCommand = Request.Form["command"];
                    strParameter = Request.Form["parameter"];
                    //  ControlLog.writeLog("[Page_Load:Default.aspx.cs] AJAX CMD="+strCommand+" PAR="+strParameter);
                    DBMethods objConnection = new DBMethods();
                    switch (strCommand)
                    {
                        case "accessToken":
                            #region Access Token
                            try
                            {
                                string strAccessTokenReceived = strParameter.Substring(strParameter.IndexOf("?access_token=") + 14, strParameter.IndexOf("&expires_in") - (strParameter.IndexOf("?access_token=") + 14));
                                ControlLog.writeLog("[default.aspx:Page_load] Access token enviado = " + strAccessTokenReceived);

                                ControlSesion.session(ControlSesion.AccessToken, strAccessTokenReceived);
                                return;
                            }
                            catch (Exception ee)
                            {
                                // lblEstado.Text = "Error guardando token = " + ee.Message;
                                ControlLog.writeLog("[default.aspx:Page_load] Error guardando ACCESS TOKEN " + ee.Message);
                                return;
                            }

                            #endregion
                            break;
                        case "competidor":
                            #region Competidor
                            if (strParameter == "agregarAlProceso")
                            {
                                ControlLog.writeLog("[default.aspx:Page_load] Evento AJAX - Agregar competidor al proceso");
                                if (listboxCompetidoresDisponibles.SelectedIndex != -1)
                                {
                                    ControlLog.writeLog("[default.aspx:Page_load] Agregando competidor...");
                                    objConnection.agregarCompetidorAProcesar(Convert.ToInt32(listboxCompetidoresDisponibles.SelectedItem.Value));
                                    listboxCompetidoresAProcesar.DataBind();
                                    listboxCompetidoresDisponibles.DataBind();
                                }
                                else
                                {
                                    ControlLog.writeLog("[default.aspx:Page_load] WARNING: No hay competidor seleccionado para la operacion");
                                    WebMsgBox.Show("Debe seleccionarse un competidor de la lista de competidores disponibles");
                                }

                            }
                            else if (strParameter == "quitarDelProceso")
                            {
                                ControlLog.writeLog("[default.aspx:Page_load] Evento AJAX - Quitar competidor del proceso");
                                if (listboxCompetidoresAProcesar.SelectedIndex != -1)
                                {
                                    objConnection.quitarCompetidorAProcesar(Convert.ToInt32(listboxCompetidoresAProcesar.SelectedItem.Value));
                                    listboxCompetidoresAProcesar.DataBind();
                                    listboxCompetidoresDisponibles.DataBind();
                                }
                                else
                                {
                                    ControlLog.writeLog("[default.aspx:Page_load] WARNING: No hay competidor seleccionado para la operacion");
                                    WebMsgBox.Show("Debe seleccionarse un competidor de la lista de competidores a procesar");
                                }
                            }
                            else
                            {
                                ControlLog.writeLog("[default.aspx:Page_load] Evento AJAX - Competidor PARAMETRO DESCONOCIDO: " + strParameter);
                            }
                            #endregion
                            break;
                        case "tareasPendientes":
                            DBMethods objConnectionForPendingTasks = new DBMethods();
                            if (ControlSesion.session(ControlSesion.UsuarioLogin) != String.Empty)
                            {
                                #region Tareas Pendientes
                                switch (strParameter)
                                {
                                    case "quitarModDePreciosFinalizadas":
                                        #region Quitar tareas de Modificacion de precios finalizadas
                                        try
                                        {
                                            ControlLog.writeLog("[Page_Load:Default.aspx.cs] Quitando tareas finalizadas de MODIFICACION DE PRECIOS");
                                            List<TareaPendiente> lstTareasPendientesCalculo = objConnectionForPendingTasks.verTareasPendientes(objConnectionForPendingTasks.obtenerIdUsuarioDeNickName(ControlSesion.session(ControlSesion.UsuarioLogin)), ControlModificacionDePrecios.NombreTareaCalculo);
                                            foreach (TareaPendiente objTarea in lstTareasPendientesCalculo)
                                            {
                                                switch (objTarea.getModulo())
                                                {
                                                    case ControlModificacionDePrecios.NombreTareaCalculo:
                                                        if (objTarea.ToString().Contains("<b>Estado:</b>END_VISIBLE"))
                                                        {
                                                            objTarea.finalizar();
                                                        }
                                                        else if (objTarea.ToString().Contains("<b>Estado:</b>ERROR"))
                                                        {
                                                            objTarea.finalizar();
                                                        }
                                                        break;
                                                }
                                            }
                                            List<TareaPendiente> lstTareasPendientesImpacto = objConnectionForPendingTasks.verTareasPendientes(objConnectionForPendingTasks.obtenerIdUsuarioDeNickName(ControlSesion.session(ControlSesion.UsuarioLogin)), ControlModificacionDePrecios.NombreTareaImpacto);
                                            foreach (TareaPendiente objTarea in lstTareasPendientesImpacto)
                                            {
                                                switch (objTarea.getModulo())
                                                {
                                                    case ControlModificacionDePrecios.NombreTareaImpacto:
                                                        if (objTarea.ToString().Contains("<b>Estado:</b>END_VISIBLE"))
                                                        {
                                                            objTarea.finalizar();
                                                        }
                                                        else if (objTarea.ToString().Contains("<b>Estado:</b>ERROR"))
                                                        {
                                                            objTarea.finalizar();
                                                        }
                                                        break;
                                                }
                                            }

                                        }
                                        catch (Exception ex)
                                        {
                                            ControlLog.writeLog("[Page_Load:Default.aspx.cs] Excepcion obteniendo tareas pendientes para su finalizado: " + ex.Message);
                                        }
                                        #endregion
                                        break;
                                    case ControlModificacionDePrecios.NombreTareaCalculo:
                                    case ControlModificacionDePrecios.NombreTareaImpacto:
                                        #region Modificaciones de Precio
                                        try
                                        {

                                            string strEstadoModDePrecios = "<br/><a id=\"divModificacionesDePreciosPendientes\" style=\"color:White;\">";
                                            //          ControlLog.writeLog("[AJAX] Verificando tareas pendientes de improtacion para usuario: " + Request.Cookies["userName"].Value.ToString());
                                            List<TareaPendiente> lstTareasPendientesCalculo = objConnectionForPendingTasks.verTareasPendientes(objConnectionForPendingTasks.obtenerIdUsuarioDeNickName(ControlSesion.session(ControlSesion.UsuarioLogin)), ControlModificacionDePrecios.NombreTareaCalculo);
                                            List<TareaPendiente> lstTareasPendientesPendientes = objConnectionForPendingTasks.verTareasPendientes(objConnectionForPendingTasks.obtenerIdUsuarioDeNickName(ControlSesion.session(ControlSesion.UsuarioLogin)), ControlModificacionDePrecios.NombreTareaImpacto);
                                            List<TareaPendiente> lstTareasPendientes = new List<TareaPendiente>();
                                            lstTareasPendientes.InsertRange(0, lstTareasPendientesCalculo);
                                            lstTareasPendientes.InsertRange(lstTareasPendientes.Count, lstTareasPendientesPendientes);
                                            //    ControlLog.writeLog("[Page_Load:Default.aspx.cs] Importacion: Tareas pendientes:  " + lstTareasPendientes.Count.ToString());
                                            if (lstTareasPendientes.Count == 0)
                                            {
                                                strEstadoModDePrecios += "       <b> No hay tareas de modificacion de precios pendientes </b> - " + System.DateTime.Now.Day.ToString().PadLeft(2, '0') + "-" + System.DateTime.Now.Month.ToString().PadLeft(2, '0') + "-" + System.DateTime.Now.Year.ToString() + "  " + System.DateTime.Now.Hour.ToString().PadLeft(2, '0') + ":" + System.DateTime.Now.Minute.ToString().PadLeft(2, '0') + ":" + System.DateTime.Now.Second.ToString().PadLeft(2, '0');
                                            }
                                            foreach (TareaPendiente objTarea in lstTareasPendientes)
                                            {
                                                switch (objTarea.getModulo())
                                                {
                                                    case ControlModificacionDePrecios.NombreTareaCalculo:
                                                    case ControlModificacionDePrecios.NombreTareaImpacto:
                                                        if (objTarea.ToString().Contains("<b>Estado:</b>ERROR"))
                                                        {
                                                            strEstadoModDePrecios += "<li><a style=\"color:Red;\">" + objTarea.ToString() + "</a></li><br/>";
                                                        }
                                                        else if (objTarea.ToString().Contains("<b>Estado:</b>END_VISIBLE"))
                                                        {
                                                            strEstadoModDePrecios += "<li><a style=\"color:Green;\">" + objTarea.ToString() + "</a></li><br/>";
                                                        }
                                                        else
                                                        {
                                                            strEstadoModDePrecios += "<li><a style=\"color:White;\">" + objTarea.ToString() + "</a></li><br/>";
                                                        }
                                                        break;

                                                    default:
                                                        ControlLog.writeLog("[Page_Load:Default.aspx.cs] Default getModulo en: " + objTarea.getModulo());
                                                        break;
                                                }
                                            }
                                            strEstadoModDePrecios += "</a>";
                                            //   ControlLog.writeLog("[Page_Load:Default.aspx.cs] Estado importacion: " + strEstadoImportacion);
                                            ControlSesion.session("estadoTareasModDePrecios", strEstadoModDePrecios);
                                            if (strEstadoModDePrecios.Contains("No hay tareas de modificacion de precios pendientes") || strEstadoModDePrecios.Contains("<b>Estado:</b>END_VISIBLE"))
                                            {
                                                if (ControlSesion.session(ControlModificacionDePrecios.ConstIdleMode) == ControlModificacionDePrecios.ConstIdleModeValueFALSE)
                                                {
                                                    ControlLog.writeLog("[DEBUG] strEstadoModDePrecios IDLE TRUE");
                                                    ControlSesion.session("estadoTareasModDePrecios", strEstadoModDePrecios);
                                                    ControlSesion.session(ControlModificacionDePrecios.ConstIdleMode, ControlModificacionDePrecios.ConstIdleModeValueTRUE);
                                                }
                                            }
                                            else
                                            {

                                                if (ControlSesion.session(ControlModificacionDePrecios.ConstIdleMode) == ControlModificacionDePrecios.ConstIdleModeValueTRUE)
                                                {
                                                    ControlLog.writeLog("[DEBUG] strEstadoModDePrecios IDLE FALSE");
                                                    ControlSesion.session(ControlModificacionDePrecios.ConstIdleMode, ControlModificacionDePrecios.ConstIdleModeValueFALSE);
                                                }
                                                ControlLog.writeLog("[DEBUG] strEstadoModDePrecios WORKING");
                                                ControlSesion.session("estadoTareasModDePrecios", strEstadoModDePrecios);
                                            }

                                        }
                                        catch (Exception ex)
                                        {
                                            ControlLog.writeLog("[Page_Load:Default.aspx.cs] Excepcion obteniendo tareas pendientes: " + ex.Message);
                                        }
                                        #endregion
                                        break;
                                    case "quitarImportacionesFinalizadas":
                                        #region Quitar Tareas de importacion finalizadas
                                        try
                                        {
                                            ControlLog.writeLog("[Page_Load:Default.aspx.cs] Quitando tareas finalizadas de IMPORTACION");
                                            List<TareaPendiente> lstTareasPendientes = objConnectionForPendingTasks.verTareasPendientes(objConnectionForPendingTasks.obtenerIdUsuarioDeNickName(ControlSesion.session(ControlSesion.UsuarioLogin)), "Importaciones");
                                            foreach (TareaPendiente objTarea in lstTareasPendientes)
                                            {
                                                switch (objTarea.getModulo())
                                                {
                                                    case "Importaciones":
                                                        if (objTarea.ToString().Contains("<b>Estado:</b>END_VISIBLE"))
                                                        {
                                                            objTarea.finalizar();
                                                        }
                                                        else if (objTarea.ToString().Contains("<b>Estado:</b>ERROR"))
                                                        {
                                                            objTarea.finalizar();
                                                        }
                                                        break;
                                                }
                                            }

                                        }
                                        catch (Exception ex)
                                        {
                                            ControlLog.writeLog("[Page_Load:Default.aspx.cs] Excepcion obteniendo tareas pendientes para su finalizado: " + ex.Message);
                                        }
                                        #endregion
                                        break;
                                    case "Importaciones":
                                        #region Importaciones
                                        try
                                        {

                                            string strEstadoImportacion = "<br/><a id=\"divEstadoTareasImportacion\" style=\"color:White;\">";
                                            //          ControlLog.writeLog("[AJAX] Verificando tareas pendientes de improtacion para usuario: " + Request.Cookies["userName"].Value.ToString());
                                            List<TareaPendiente> lstTareasPendientes = objConnectionForPendingTasks.verTareasPendientes(objConnectionForPendingTasks.obtenerIdUsuarioDeNickName(ControlSesion.session(ControlSesion.UsuarioLogin)), "Importaciones");
                                            //    ControlLog.writeLog("[Page_Load:Default.aspx.cs] Importacion: Tareas pendientes:  " + lstTareasPendientes.Count.ToString());
                                            if (lstTareasPendientes.Count == 0)
                                            {
                                                strEstadoImportacion += "       <b> No hay tareas de importacion pendientes </b> - " + System.DateTime.Now.Day.ToString().PadLeft(2, '0') + "-" + System.DateTime.Now.Month.ToString().PadLeft(2, '0') + "-" + System.DateTime.Now.Year.ToString() + "  " + System.DateTime.Now.Hour.ToString().PadLeft(2, '0') + ":" + System.DateTime.Now.Minute.ToString().PadLeft(2, '0') + ":" + System.DateTime.Now.Second.ToString().PadLeft(2, '0');

                                            }
                                            foreach (TareaPendiente objTarea in lstTareasPendientes)
                                            {
                                                switch (objTarea.getModulo())
                                                {
                                                    case "Importaciones":

                                                        if (objTarea.ToString().Contains("<b>Estado:</b>ERROR"))
                                                        {
                                                            strEstadoImportacion += "<li><a style=\"color:Red;\">" + objTarea.ToString() + "</a></li><br/>";
                                                        }
                                                        else if (objTarea.ToString().Contains("<b>Estado:</b>END_VISIBLE"))
                                                        {
                                                            strEstadoImportacion += "<li><a style=\"color:Green;\">" + objTarea.ToString() + "</a></li><br/>";
                                                        }
                                                        else
                                                        {
                                                            strEstadoImportacion += "<li><a style=\"color:White;\">" + objTarea.ToString() + "</a></li><br/>";
                                                        }
                                                        break;
                                                    default:
                                                        ControlLog.writeLog("[Page_Load:Default.aspx.cs] Default getModulo en importacion: " + objTarea.getModulo());
                                                        break;
                                                }
                                            }
                                            strEstadoImportacion += "</a>";
                                            //   ControlLog.writeLog("[Page_Load:Default.aspx.cs] Estado importacion: " + strEstadoImportacion);
											ControlSesion.session("estadoTareasImportacion", strEstadoImportacion);

											//if (strEstadoImportacion.Contains("No hay tareas de importacion pendientes") || strEstadoImportacion.Contains("<b>Estado:</b>END_VISIBLE"))
											//{
											//    if (ControlSesion.session(ControlImportacion.ConstIdleMode) == ControlImportacion.ConstIdleModeValueFALSE)
											//    {
											//        ControlLog.writeLog("[DEBUG] Importaciones IDLE TRUE");
											//        ControlSesion.session("estadoTareasImportacion", strEstadoImportacion);
											//        ControlSesion.session(ControlImportacion.ConstIdleMode, ControlImportacion.ConstIdleModeValueTRUE);
											//    }
											//}
											//else
											//{

											//    if (ControlSesion.session(ControlImportacion.ConstIdleMode) == ControlImportacion.ConstIdleModeValueTRUE)
											//    {
											//        ControlLog.writeLog("[DEBUG] Importaciones IDLE FALSE");
											//        ControlSesion.session(ControlImportacion.ConstIdleMode, ControlImportacion.ConstIdleModeValueFALSE);
											//    }
											//    ControlLog.writeLog("[DEBUG] Importaciones WORKING");
											//    ControlSesion.session("estadoTareasImportacion", strEstadoImportacion);
											//}



                                        }
                                        catch (Exception ex)
                                        {
                                            ControlLog.writeLog("[Page_Load:Default.aspx.cs] Excepcion obteniendo tareas pendientes: " + ex.Message);
                                        }
                                        #endregion
                                        break;
                                    case "quitarPublicacionesFinalizadas":
                                        #region Quitar Tareas de importacion finalizadas
                                        try
                                        {
                                            ControlLog.writeLog("[Page_Load:Default.aspx.cs] Quitando tareas finalizadas de PUBLICACION");
                                            List<TareaPendiente> lstTareasPendientes = objConnectionForPendingTasks.verTareasPendientes(objConnectionForPendingTasks.obtenerIdUsuarioDeNickName(ControlSesion.session(ControlSesion.UsuarioLogin)), "Publicaciones");
                                            foreach (TareaPendiente objTarea in lstTareasPendientes)
                                            {
                                                switch (objTarea.getModulo())
                                                {
                                                    case "Publicaciones":
                                                        if (objTarea.ToString().Contains("<b>Estado:</b>END_VISIBLE"))
                                                        {
                                                            objTarea.finalizar();
                                                        }
                                                        else if (objTarea.ToString().Contains("<b>Estado:</b>ERROR"))
                                                        {
                                                            objTarea.finalizar();
                                                        }
                                                        break;
                                                }
                                            }

                                        }
                                        catch (Exception ex)
                                        {
                                            ControlLog.writeLog("[Page_Load:Default.aspx.cs] Excepcion obteniendo tareas pendientes para su finalizado: " + ex.Message);
                                        }
                                        #endregion
                                        break;
                                    case "Publicaciones":
                                        #region Publicaciones
                                        try
                                        {

                                            string strEstadoPublicacion = "<br/><a id=\"divEstadoTareasPublicacion\" style=\"color:White;\">";
                                            //          ControlLog.writeLog("[AJAX] Verificando tareas pendientes de improtacion para usuario: " + Request.Cookies["userName"].Value.ToString());
                                            List<TareaPendiente> lstTareasPendientes = objConnectionForPendingTasks.verTareasPendientes(objConnectionForPendingTasks.obtenerIdUsuarioDeNickName(ControlSesion.session(ControlSesion.UsuarioLogin)), "Publicaciones");
                                            if (lstTareasPendientes.Count == 0)
                                            {
                                                strEstadoPublicacion += "       <b> No hay tareas de publicacion pendientes </b> - " + System.DateTime.Now.Day.ToString().PadLeft(2, '0') + "-" + System.DateTime.Now.Month.ToString().PadLeft(2, '0') + "-" + System.DateTime.Now.Year.ToString() + "  " + System.DateTime.Now.Hour.ToString().PadLeft(2, '0') + ":" + System.DateTime.Now.Minute.ToString().PadLeft(2, '0') + ":" + System.DateTime.Now.Second.ToString().PadLeft(2, '0');
                                            }
                                            foreach (TareaPendiente objTarea in lstTareasPendientes)
                                            {
                                                switch (objTarea.getModulo())
                                                {
                                                    case "Publicaciones":
                                                        if (objTarea.ToString().Contains("<b>Estado:</b>ERROR"))
                                                        {
                                                            strEstadoPublicacion += "<li><a style=\"color:Red;\">" + objTarea.ToString() + "</a></li><br/>";
                                                        }
                                                        else if (objTarea.ToString().Contains("<b>Estado:</b>END_VISIBLE"))
                                                        {
                                                            strEstadoPublicacion += "<li><a style=\"color:Green;\">" + objTarea.ToString() + "</a></li><br/>";
                                                        }
                                                        else
                                                        {
                                                            strEstadoPublicacion += "<li><a style=\"color:White;\">" + objTarea.ToString() + "</a></li><br/>";
                                                        }
                                                        break;
                                                }
                                            }
                                            strEstadoPublicacion += "</a>";
                                            //  ControlLog.writeLog("[Page_Load:Default.aspx.cs] Estado importacion: " + strEstadoImportacion);
                                            ControlSesion.session("estadoTareasPublicacion", strEstadoPublicacion);
                                        }
                                        catch (Exception ex)
                                        {
                                            ControlLog.writeLog("[Page_Load:Default.aspx.cs] Excepcion obteniendo tareas pendientes: " + ex.Message);
                                        }
                                        #endregion
                                        break;
                                    case "quitarCrearCompetidoresFinalizadas":
                                        #region Quitar Tareas de crear Competidores finalizadas
                                        try
                                        {
                                            ControlLog.writeLog("[Page_Load:Default.aspx.cs] Quitando tareas finalizadas de CREAR COMPETIDOR");
                                            List<TareaPendiente> lstTareasPendientes = objConnectionForPendingTasks.verTareasPendientes(objConnectionForPendingTasks.obtenerIdUsuarioDeNickName(ControlSesion.session(ControlSesion.UsuarioLogin)), "Competidores");
                                            foreach (TareaPendiente objTarea in lstTareasPendientes)
                                            {
                                                switch (objTarea.getModulo())
                                                {
                                                    case "Competidores":
                                                        if (objTarea.ToString().Contains("<b>Estado:</b>END_VISIBLE"))
                                                        {
                                                            objTarea.finalizar();
                                                        }
                                                        else if (objTarea.ToString().Contains("<b>Estado:</b>ERROR"))
                                                        {
                                                            objTarea.finalizar();
                                                        }
                                                        break;
                                                }
                                            }

                                        }
                                        catch (Exception ex)
                                        {
                                            ControlLog.writeLog("[Page_Load:Default.aspx.cs] Excepcion obteniendo tareas pendientes para su finalizado: " + ex.Message);
                                        }
                                        #endregion
                                        break;
                                    case "crearCompetidores":
                                        #region Creacion de competidores
                                        try
                                        {

                                            string strEstadoCreacionCompetidor = "<br/><a id=\"divEstadoTareasCompetenciaCrear\" style=\"color:White;\">";
                                            //          ControlLog.writeLog("[AJAX] Verificando tareas pendientes de improtacion para usuario: " + Request.Cookies["userName"].Value.ToString());
                                            List<TareaPendiente> lstTareasPendientes = objConnectionForPendingTasks.verTareasPendientes(objConnectionForPendingTasks.obtenerIdUsuarioDeNickName(ControlSesion.session(ControlSesion.UsuarioLogin)), "Competidores");
                                            if (lstTareasPendientes.Count == 0)
                                            {
                                                strEstadoCreacionCompetidor += "       <b> No hay tareas de creacion de competidor pendientes </b> - " + System.DateTime.Now.Day.ToString().PadLeft(2, '0') + "-" + System.DateTime.Now.Month.ToString().PadLeft(2, '0') + "-" + System.DateTime.Now.Year.ToString() + "  " + System.DateTime.Now.Hour.ToString().PadLeft(2, '0') + ":" + System.DateTime.Now.Minute.ToString().PadLeft(2, '0') + ":" + System.DateTime.Now.Second.ToString().PadLeft(2, '0');
                                            }
                                            foreach (TareaPendiente objTarea in lstTareasPendientes)
                                            {
                                                switch (objTarea.getModulo())
                                                {
                                                    case "Competidores":
                                                        if (objTarea.ToString().Contains("<b>Estado:</b>ERROR"))
                                                        {
                                                            strEstadoCreacionCompetidor += "<li><a style=\"color:Red;\">" + objTarea.ToString() + "</a></li><br/>";
                                                        }
                                                        else if (objTarea.ToString().Contains("<b>Estado:</b>END_VISIBLE"))
                                                        {
                                                            strEstadoCreacionCompetidor += "<li><a style=\"color:Green;\">" + objTarea.ToString() + "</a></li><br/>";
                                                        }
                                                        else
                                                        {
                                                            strEstadoCreacionCompetidor += "<li><a style=\"color:White;\">" + objTarea.ToString() + "</a></li><br/>";
                                                        }
                                                        break;
                                                }
                                            }
                                            strEstadoCreacionCompetidor += "</a>";
                                            //  ControlLog.writeLog("[Page_Load:Default.aspx.cs] Estado importacion: " + strEstadoImportacion);
                                            ControlSesion.session("estadoTareasCrearCompetidor", strEstadoCreacionCompetidor);
                                        }
                                        catch (Exception ex)
                                        {
                                            ControlLog.writeLog("[Page_Load:Default.aspx.cs] Excepcion obteniendo tareas pendientes: " + ex.Message);
                                        }
                                        #endregion
                                        break;
                                    case "analizarCompetidores":
                                        #region Analisis de competidores
                                        try
                                        {

                                            string strEstadoAnalisisCompetidor = "<br/><a id=\"divEstadoTareasCompetenciaAnalizar\" style=\"color:White;\">";
                                            //          ControlLog.writeLog("[AJAX] Verificando tareas pendientes de improtacion para usuario: " + Request.Cookies["userName"].Value.ToString());
                                            List<TareaPendiente> lstTareasPendientes = objConnectionForPendingTasks.verTareasPendientes(objConnectionForPendingTasks.obtenerIdUsuarioDeNickName(ControlSesion.session(ControlSesion.UsuarioLogin)), "CompetidoresAnalisis");
                                            if (lstTareasPendientes.Count == 0)
                                            {
                                                strEstadoAnalisisCompetidor += "       <b> No hay tareas de analisis de competidor pendientes </b> - " + System.DateTime.Now.Day.ToString().PadLeft(2, '0') + "-" + System.DateTime.Now.Month.ToString().PadLeft(2, '0') + "-" + System.DateTime.Now.Year.ToString() + "  " + System.DateTime.Now.Hour.ToString().PadLeft(2, '0') + ":" + System.DateTime.Now.Minute.ToString().PadLeft(2, '0') + ":" + System.DateTime.Now.Second.ToString().PadLeft(2, '0');
                                            }
                                            foreach (TareaPendiente objTarea in lstTareasPendientes)
                                            {
                                                switch (objTarea.getModulo())
                                                {
                                                    case "CompetidoresAnalisis":
                                                        if (objTarea.ToString().Contains("<b>Estado:</b>ERROR"))
                                                        {
                                                            strEstadoAnalisisCompetidor += "<li><a style=\"color:Red;\">" + objTarea.ToString() + "</a></li><br/>";
                                                        }
                                                        else if (objTarea.ToString().Contains("<b>Estado:</b>END_VISIBLE"))
                                                        {
                                                            strEstadoAnalisisCompetidor += "<li><a style=\"color:Green;\">" + objTarea.ToString() + "</a></li><br/>";
                                                        }
                                                        else
                                                        {
                                                            strEstadoAnalisisCompetidor += "<li><a style=\"color:White;\">" + objTarea.ToString() + "</a></li><br/>";
                                                        }
                                                        break;
                                                }
                                            }
                                            strEstadoAnalisisCompetidor += "</a>";
                                            //  ControlLog.writeLog("[Page_Load:Default.aspx.cs] Estado importacion: " + strEstadoImportacion);
                                            ControlSesion.session("estadoTareasAnalizarCompetidor", strEstadoAnalisisCompetidor);
                                        }
                                        catch (Exception ex)
                                        {
                                            ControlLog.writeLog("[Page_Load:Default.aspx.cs] Excepcion obteniendo tareas pendientes: " + ex.Message);
                                        }
                                        #endregion
                                        break;
                                    case "quitarAnalizarCompetidoresFinalizadas":
                                        #region Quitar Tareas de analizar competidores finalizadas
                                        try
                                        {
                                            ControlLog.writeLog("[Page_Load:Default.aspx.cs] Quitando tareas finalizadas de ANALIZAR COMPETIDOR");
                                            List<TareaPendiente> lstTareasPendientes = objConnectionForPendingTasks.verTareasPendientes(objConnectionForPendingTasks.obtenerIdUsuarioDeNickName(ControlSesion.session(ControlSesion.UsuarioLogin)), "CompetidoresAnalisis");
                                            foreach (TareaPendiente objTarea in lstTareasPendientes)
                                            {
                                                switch (objTarea.getModulo())
                                                {
                                                    case "CompetidoresAnalisis":
                                                        if (objTarea.ToString().Contains("<b>Estado:</b>END_VISIBLE"))
                                                        {
                                                            objTarea.finalizar();
                                                        }
                                                        else if (objTarea.ToString().Contains("<b>Estado:</b>ERROR"))
                                                        {
                                                            objTarea.finalizar();
                                                        }
                                                        break;
                                                }
                                            }

                                        }
                                        catch (Exception ex)
                                        {
                                            ControlLog.writeLog("[Page_Load:Default.aspx.cs] Excepcion obteniendo tareas pendientes para su finalizado: " + ex.Message);
                                        }
                                        #endregion
                                        break;
                                }
                                #endregion
                            }
                            else
                            {
                                ControlLog.writeLog("[default.aspx:Page_Load::tareasPendientes] No hay usuario logueado. Omitimos averiguar tareas..Todo OK!");
                            }
                            break;
                        case "actualizarGUI":
                            #region Actualizar GUI por eventos terminados o que cambiaron
                            if (ControlSesion.session("actualizarGUIPorCreacionDeCompetidor") == "TRUE")
                            {
                                ControlSesion.session("actualizarGUIPorCreacionDeCompetidor", "FALSE");
                                listboxCompetidoresDisponibles.DataBind();
                                listboxCompetidoresSeguidos.DataBind();
                                ControlLog.writeLog("[default.aspx:Page_load] Competidor agregado OK!");
                            }
                            #endregion
                            break;
                        default:
                            ControlLog.writeLog("[default.aspx:Page_load] Evento AJAX Desconocido: Comando=" + strCommand + " Parametro=" + strParameter);
                            break;
                    }

                    return;
                }
            }
            catch (Exception ex)
            {
                ControlLog.writeLog("[default.aspx:Page_load] Excepcion procesando evento AJAX: " + ex.Message);
            }
            // }
            #endregion
            #region VARIABLES DE SESION


            ///HZ v2.0.4.2 string sUsuarioLogin = ""; ///Deprecated
            try
            {
                if (ControlSesion.session(ControlSesion.UsuarioLogin) == String.Empty)
                {
                    ControlLog.writeLog("[Page_Load:Default.aspx.cs] No hay usuario loggueado. Se redirecciona a Login.aspx");
                    Response.Redirect("Login.aspx?Err=NotLogged", false);
                }
                else
                {
                    bool boolAccessGranted = false;
                    foreach (string cookieName in Request.Cookies.AllKeys)
                    {
                        if (cookieName == "IsSomeoneLoggedInHere")
                        {
                            boolAccessGranted = true;
                            break;
                        }
                    }

                    if (boolAccessGranted == false)
                    {
                        ControlLog.writeLog("[Page_Load:Default.aspx.cs] No existe la cookie IsSomeoneLoggedInHere, se devuelve a la etapa de Login");

                        Response.Redirect("Login.aspx?Err=2", false);
                    }
                    else
                    {
                        ControlLog.writeLog("[Page_Load:Default.aspx.cs] Usuario en Sesion = " + ControlSesion.session(ControlSesion.UsuarioLogin));
                        lblUsuarioLogueado.Text = ControlSesion.session(ControlSesion.UsuarioLogin);
                    }
                }


            }
            catch (Exception ex)
            {
                ControlLog.writeLog("[Page_Load:Default.aspx.cs] Excepcion verificando sesion (Se retorna a Login.aspx): " + ex.Message);
                Response.Redirect("Login.aspx", false);
            }

            #endregion




            if (!IsPostBack)
            {
                string sPath = MapPath("Temp_CSV");
                string[] filePaths = Directory.GetFiles(sPath);
                foreach (string filePath in filePaths)
                    File.Delete(filePath);
            }
            btnDescargar.Enabled = false;
            btnPublicacionDePrueba.Enabled = false;
        }

        protected void btnBorrarProductosPendientes(object sender, EventArgs e)
        {

            try
            {
                ControlImportacion.borrarPendientes(ControlSesion.session(ControlSesion.UsuarioLogin));
            }
            catch (Exception ex)
            {
                ControlLog.writeLog("[btnBorrarProductosPendientes] Excepcion borrando productos pendientes = " + ex.Message);
                WebMsgBox.Show("Excepcion borrando productos pendientes: " + ex.Message);
                return;
            }
        }
        protected void btnActualizarListaDeCompetidoresCreados(object sender, EventArgs e)
        {
            Response.Redirect("Default.aspx", false);
        }
        protected void btnBorrarTodasLasTareas_Click(object sender, EventArgs e)
        {
            DBMethods objConnection = new DBMethods();
            try
            {
                objConnection.borrarTodasLasTareas();
                ControlLog.writeLog("[btnBorrarTodasLasTareas_Click] Se borraron las tareas OK");
                WebMsgBox.Show("Tareas borradas OK");
            }
            catch (Exception ex)
            {
                ControlLog.writeLog("[btnBorrarTodasLasTareas_Click] Excepcion borrando todas las tareas = " + ex.Message);
                WebMsgBox.Show("Error borrando las tareas: " + ex.Message);
            }
        }


        protected void btnReporteProductosImportados(object sender, EventArgs e)
        {
			string path = MapPath("Importaciones");

			//string[] filePaths = Directory.GetFiles(MapPath("Importaciones"));
			//foreach (string filePath in filePaths)
			//    File.Delete(filePath);

			try
			{
				Response.Clear();
				Response.ContentType = "application/vnd.ms-excel";
				Response.AddHeader("content-disposition", "attachment;filename=ProductosImportadosOk_"
									+ System.DateTime.Now.Day.ToString().PadLeft(2, '0')
									+ System.DateTime.Now.Month.ToString().PadLeft(2, '0')
									+ System.DateTime.Now.Year.ToString().PadLeft(4, '0')
									+ System.DateTime.Now.Hour.ToString().PadLeft(2, '0')
									+ System.DateTime.Now.Minute.ToString().PadLeft(2, '0')
									+ System.DateTime.Now.Second.ToString().PadLeft(2, '0')
									+ ".xls");
				ControlReporte.ExportarImportadosOk().WriteTo(Response.OutputStream);
			}
			catch (Exception ee)
			{
				WebMsgBox.Show("Error generando reporte de productos importados OK: " + ee.Message);
				ControlLog.writeLog("[btnReporteProductosImportados] Error generando reporte de productos importados OK: " + ee.Message);
				return;
			}


			
        }

   
        
        protected void btnSacarProductosPublicadosOK(object sender, EventArgs e)
        {
            DBMethods objConnection = new DBMethods();
            try
            {
                objConnection.eliminarProductosOkDeUsuario(ControlSesion.session(ControlSesion.UsuarioLogin));
            }
            catch (Exception ee)
            {
                WebMsgBox.Show("Excepcion General eliminando de DB los productos OK: " + ee.Message);
                ControlLog.writeLog("[btnSacarProductosPublicadosOK] Excepcion General eliminando de DB los productos OK: " + ee.Message);
                return;
            }
        }

        protected void btnSacarProductosPublicadosKO(object sender, EventArgs e)
        {
            DBMethods objConnection = new DBMethods();
            try
            {
                objConnection.eliminarProductosKoDeUsuario(ControlSesion.session(ControlSesion.UsuarioLogin));
            }
            catch (Exception ee)
            {
                WebMsgBox.Show("Excepcion General eliminando de DB los productos KO: " + ee.Message);
                ControlLog.writeLog("[btnSacarProductosPublicadosKO] Excepcion General eliminando de DB los productos KO: " + ee.Message);
                return;
            }
        }


        protected void btnProcesarCompetidorAsync_Click(object sender, EventArgs e)
        {
            this.procesarCompetidores();
        }


        protected void btnPublicarProductosPendientes(object sender, EventArgs e)
        {
            this.publicarProductosPendientes();
        }

        protected void buttonABMCompetidorAgregarAsync_Click(object sender, EventArgs e)
        {
            this.agregarCompetidor();
        }

        protected void buttonImportarArchivo(object sender, EventArgs e)
        {
            this.importarArchivoParaPublicar();
        }

        protected void btnAceptar_Click(object sender, EventArgs e)
        {
            lblEstado.Text = "Procesando...";

            DataTable dt = new DataTable();

            int iCant = 0, iCantReal = 0, iPage;
            string sPath = MapPath("Temp_CSV");
            string sDest, fileName, sPage, sCant, sUrl;

            if (txtUrl.Text != String.Empty)
            {
                try
                {
                    if (!txtUrl.Text.Contains("&pS="))
                        txtUrl.Text += "#fT=&gP=1&pS=60&v=g&sB=bS&lP=c&catId=site1YJD";

                    iCant = Convert.ToInt32(txtUrl.Text.Substring(txtUrl.Text.IndexOf("&pS=") + 4, 2));
                    sCant = "&pS=" + iCant.ToString();

                    sPage = "?gP=" + txtUrl.Text.Substring(txtUrl.Text.IndexOf("&gP=") + 4, 1);
                    iPage = Convert.ToInt32(txtUrl.Text.Substring(txtUrl.Text.IndexOf("&gP=") + 4, 1));

                    sUrl = txtUrl.Text.Substring(0, txtUrl.Text.IndexOf('#')) + sPage + sCant;

                    InitProductoExportacion(iCant);

                    prod_exportacion = ControlHTML.ProcesarCatalogo(sUrl, ref iCantReal, ref prod_grilla);

                    dt = CargarGrilla(prod_grilla, iCantReal);

                    gvProd.DataSource = dt;
                    gvProd.DataBind();

                    fileName = ControlCSV.CrearNombreCSV(txtUrl.Text);
                    sDest = sPath + "\\" + fileName + ".csv";

                    ControlCSV.GuardarCSV(prod_exportacion, sDest, iCantReal);

                    lblEstado.Text = "Proceso OK, listo para descarga. Productos " + (iCant * iPage - iCant + 1).ToString() + " a " + (iCant * iPage - iCant + iCantReal).ToString() + " exportados.";

                    btnDescargar.Enabled = true;
                }
                catch (Exception Ex)
                {
                    lblEstado.Text = Ex.Message;
                }
            }
            else
            {
                lblEstado.Text = "Por favor especifique una URL de la página http://www.musiciansfriend.com";
            }
        }

        //HZ v2.0.4.6
        private void publicarProductosPendientes()
        {
            try
            {
                ControlPublicacion objHandlerPublicacion = new ControlPublicacion(ddlReintentosPublicacion.SelectedValue, ddlReintentosPublicacionEspacios.SelectedValue);

                if (!objHandlerPublicacion.hayPublicacionesPendientes())
                {
                    ControlLog.writeLog("[publicarProductosPendientes] No hay publicaciones pendientes!");
                    WebMsgBox.Show("No hay publicaciones pendientes");
                    return;
                }

                ControlPublicacionAsyncHandler objAsyncHandler = new ControlPublicacionAsyncHandler();
                objAsyncHandler.BeginProcessRequest(HttpContext.Current, null, objHandlerPublicacion);
                ControlLog.writeLog("[publicarProductosPendientes] Thread de publicacion lanzado OK");
            }
            catch (Exception ex)
            {
                ControlLog.writeLog("[publicarProductosPendientes] Excepcion publicando productos: " + ex.Message);
            }
        }

        //HZ v2.0.4.2
        private void importarArchivoParaPublicar()
        {
            try
            {
                if (FileUploadImportacion.HasFile)
                {

                    ControlImportacion objHandlerImportacion = new ControlImportacion(Request.PhysicalApplicationPath + @"Upload_NewCSV\", Server.HtmlEncode(FileUploadImportacion.FileName));

                    FileUploadImportacion.SaveAs(objHandlerImportacion.getSavePath());
                    ControlLog.writeLog("[importarArchivoParaPublicar] Se subio el archivo a " + objHandlerImportacion.getSavePath());
                    try
                    {

                        ControlImportacionAsyncHandler objAsyncHandler = new ControlImportacionAsyncHandler();
                        objAsyncHandler.BeginProcessRequest(HttpContext.Current, null, objHandlerImportacion);


                    }
                    catch (ImportacionException impEx)
                    {
                        ControlLog.writeLog("[importarArchivoParaPublicar] EXCEPCION de importacion = " + impEx.Message);
                        return;
                    }
                    ControlLog.writeLog("[importarArchivoParaPublicar] Thread de importacion lanzado OK");


                    // objHandlerImportacion.guardarPublicacionesDeArchivoEnDb();                   
                    // ControlLog.writeLog("[importarArchivoParaPublicar] Se guardo publicaciones en DB como PENDIENTES");
                    // objHandlerImportacion.borrarTemporales();
                    // ControlLog.writeLog("importarArchivoParaPublicar] Importacion finalizada OK"); 
                }
                else
                {
                    ControlLog.writeLog("[importarArchivoParaPublicar] ERROR: No hay archivo cargado para subir");
                    WebMsgBox.Show("No hay archivo cargado, elija una archivo para poder publicar");
                }
            }
            catch (ImportacionException imEx)
            {
                ControlLog.writeLog("[importarArchivoParaPublicar] Excepcion de importacion: " + imEx.Message);
                //  WebMsgBox.Show(imEx.Message);
            }
            catch (Exception ex)
            {
                ControlLog.writeLog("[importarArchivoParaPublicar] Excepcion importando archivo: " + ex.Message);
                //  WebMsgBox.Show("Error importando archivo. Mensaje = " + ex.Message);
            }
        }
        //HZ v2.0.4.6
        private void procesarCompetidores()
        {
            List<ItemValue> lstCompetidoresAProcesar = new List<ItemValue>();
            try
            {
                if (checkBoxProcesarProductos.Checked == true)
                {
                    ControlSesion.session("checkBoxProcesarProductos", "TRUE");
                }
                else
                {
                    ControlSesion.session("checkBoxProcesarProductos", "FALSE");
                }
                if (checkBoxProcesarCalificaciones.Checked == true)
                {
                    ControlSesion.session("checkBoxProcesarCalificaciones", "TRUE");
                }
                else
                {
                    ControlSesion.session("checkBoxProcesarCalificaciones", "FALSE");
                }
                ControlSesion.session("listboxCompetidoresAProcesar.Items.Count", listboxCompetidoresAProcesar.Items.Count.ToString());
                ControlSesion.session("MapPath_Competidores", MapPath("Competidores"));

                ControlCompetidorAnalizarCompetidorAsyncHandler objAsyncHandler = new ControlCompetidorAnalizarCompetidorAsyncHandler();

                foreach (ListItem objItem in listboxCompetidoresAProcesar.Items)
                {
                    ItemValue stItem;
                    stItem.Text = objItem.Text;
                    stItem.Value = objItem.Value;
                    lstCompetidoresAProcesar.Add(stItem);
                }

                objAsyncHandler.BeginProcessRequest(HttpContext.Current, null, lstCompetidoresAProcesar);


            }
            catch (CompetidorException impEx)
            {
                ControlLog.writeLog("[agregarCompetidor] EXCEPCION de analisis de competidor = " + impEx.Message);
                return;
            }
            ControlLog.writeLog("[agregarCompetidor] Thread de analisis de competidor lanzado OK");

        }

        //HZ v2.0.4.6
        private void agregarCompetidor()
        {
            Competidor objCompetidor = new Competidor();

            #region Validar Descripcion
            if (textBoxCompetidorDescripcion.Text == String.Empty)
            {
                objCompetidor.Descripcion = "";
            }
            else
            {

                objCompetidor.Descripcion = textBoxCompetidorDescripcion.Text;
            }
            #endregion
            #region Ingreso de NickName
            if (textBoxCompetidorNombre.Text == String.Empty)
            {
                WebMsgBox.Show("Debe ingresarse un valor válido de nombre de competidor");
                return;
            }
            objCompetidor.Nickname = textBoxCompetidorNombre.Text;
            #endregion
            #region Obtener Rubro
            try
            {
                objCompetidor.IdRubro = dropDownListRubrosDisponibles.SelectedItem.Value;
            }
            catch (Exception ee)
            {
                WebMsgBox.Show("Excepción obteniendo Rubro de Competidor: " + ee.Message);
                ControlLog.writeLog("[buttonABMCompetidorAgregar_Click] Excepción obteniendo Rubro de Competidor: " + ee.Message);
                return;
            }
            #endregion



            try
            {
                ControlSesion.session("pathCompetidores", MapPath("Competidores"));
                ControlSesion.session("cantidadMaximaDeCalificaciones", textBoxCantidadMaximaDeCalificaciones.Text);

                ControlCompetidorCrearCompetidorAsyncHandler objAsyncHandler = new ControlCompetidorCrearCompetidorAsyncHandler();
                objAsyncHandler.BeginProcessRequest(HttpContext.Current, null, objCompetidor);


            }
            catch (CompetidorException impEx)
            {
                ControlLog.writeLog("[agregarCompetidor] EXCEPCION de creacion de competidor = " + impEx.Message);
                return;
            }
            ControlLog.writeLog("[agregarCompetidor] Thread de creado de competidor lanzado OK");

            return;
        }


        #region DEPRECATED
        protected void btnImportar_Click(object sender, EventArgs e)
        {

            string saveDir = @"Upload_CSV\"; //Deprecated
            string appPath = Request.PhysicalApplicationPath;
            string usuario = "";
            try
            {
                usuario = ControlSesion.session(ControlSesion.UsuarioLogin); //Session["UsuarioLogin"].ToString();
            }
            catch
            {
                usuario = "Desconocido";
            }

            try
            {

                if (FileUpload1.HasFile)
                {
                    // Get the name of the file to upload.
                    string fileName = Server.HtmlEncode(FileUpload1.FileName);

                    string savePath = appPath + saveDir + fileName;

                    // Get the extension of the uploaded file.
                    string extension = System.IO.Path.GetExtension(fileName);

                    // Allow only files with .doc or .xls extensions
                    // to be uploaded.
                    if (extension == ".csv")
                    {
                        // Call the SaveAs method to save the 
                        // uploaded file to the specified path.
                        // This example does not perform all
                        // the necessary error checking.               
                        // If a file with the same name
                        // already exists in the specified path,  
                        // the uploaded file overwrites it.
                        FileUpload1.SaveAs(savePath);

                        // Notify the user that their file was successfully uploaded.
                        lblEstado.Text = "El archivo se subió con éxito.";

                        DataTable dt = new DataTable();

                        iCantPublicacion = ControlCSV.ObtenerCantidadCSV(savePath);

                        InitProductoPublicacion(iCantPublicacion);

                        prod_publicacion = ControlCSV.CargarDesdeCSV(savePath, ref prod_grilla, iCantPublicacion);

                        ControlImagen.DescargarImagenes(prod_publicacion, iCantPublicacion, appPath, usuario);
                        ControlLog.writeLog("[Importar Click] Borrando directorio = " + savePath);
                        try
                        {
                            File.Delete(savePath);
                        }
                        catch (Exception ex)
                        {
                            ControlLog.writeLog("[Importar Click] EXCEPCION Borrando archivo = " + ex.Message);
                        }

                        dt = CargarGrilla(prod_grilla, iCantPublicacion);

                        gvProd.DataSource = dt;
                        gvProd.DataBind();

                        btnPublicacionDePrueba.Enabled = true;
                        ControlLog.writeLog("[Importar Click] CSV OK! - Listo.");
                    }
                    else
                    {
                        // Notify the user why their file was not uploaded.
                        lblEstado.Text = "El archivo no tiene extensión .csv.";
                    }
                }
                else
                {
                    lblEstado.Text = "Por favor especifique un archivo a subir.";
                }
            }
            catch (Exception Ex)
            {
                lblEstado.Text = Ex.Message;
            }

        }

        protected void btnDescargar_Click(object sender, EventArgs e)
        {
            string sPath = MapPath("Temp_CSV");
            string sDest, fileName;

            fileName = ControlCSV.CrearNombreCSV(txtUrl.Text);
            sDest = sPath + "\\" + fileName + ".csv";

            // Create New instance of FileInfo class to get the properties of the file being downloaded
            FileInfo file = new FileInfo(sDest);

            // Checking if file exists
            if (file.Exists)
            {
                // Clear the content of the response
                Response.ClearContent();

                // LINE1: Add the file name and attachment, which will force the open/cance/save dialog to show, to the header
                Response.AddHeader("Content-Disposition", "attachment; filename=" + file.Name);

                // Add the file size into the response header
                Response.AddHeader("Content-Length", file.Length.ToString());

                // Set the ContentType
                Response.ContentType = "application/vnd.ms-excel";

                // Write the file into the response (TransmitFile is for ASP.NET 2.0. In ASP.NET 1.1 you have to use WriteFile instead)
                Response.TransmitFile(file.FullName);

                // End the response
                // Response.End();  //HZ v2.1.8.0
                //HttpContext.Current.ApplicationInstance.CompleteRequest();      //HZ v2.1.6.0
            }
        }

        private static DataTable CargarGrilla(TinyProd[] prod, int cant)
        {
            int i = 0;
            ControlLog.writeLog("[CargarGrilla] Cargando grilla con " + cant.ToString() + " productos...");
            DataTable dt = new DataTable();

            dt.Columns.Add(new DataColumn("ID", typeof(int)));
            dt.Columns.Add(new DataColumn("Link", typeof(string)));
            dt.Columns.Add(new DataColumn("Price", typeof(string)));

            DataRow dr;

            while (i < cant)
            {
                dr = dt.NewRow();
                dr["ID"] = i + 1;
                dr["Link"] = prod[i].Link;
                dr["Price"] = prod[i].Price;
                dt.Rows.Add(dr);
                i++;
            }
            ControlLog.writeLog("[CargarGrilla] Retornando DataTable de " + dt.Rows.Count.ToString() + " x " + dt.Columns.Count.ToString());
            return dt;
        }

        protected void Unnamed1_Click(object sender, EventArgs e)
        {
            ControlSesion.session(ControlSesion.UsuarioLogin, "");
            ControlSesion.session("PasswordLogin", "");

            /*
            Session["UsuarioLogin"] = null;
            Session["PasswordLogin"] = null;
            */

            Response.Redirect("login.aspx?msg=1", false);
        }

        protected void btnPublicacionDePrueba_Click(object sender, EventArgs e)
        {

            DBMethods _objDbMethods = new DBMethods();

            #region AUTO_LOGIN
            try
            {
                _sToken = ControlSesion.session(ControlSesion.AccessToken);//Session["access_token"].ToString();
            }
            catch (Exception ee)
            {

                lblEstado.Text = "Error en el obtiendo el token, hacer login a ML primero: " + ee.Message;
                return;
            }
            #endregion


            int i = 0;

            try
            {

                for (i = 0; i < iCantPublicacion; i++)
                {
                    string _strIdDePublicacion = "";
                    string _strLinkDePublicacion = "";

                    _strIdDePublicacion = ControlPublicacion.PublicarProductos(prod_publicacion[i], i, _sToken);

                    if (_strIdDePublicacion.IndexOf("Error") != -1)
                    {
                        lblEstado.Text = _strIdDePublicacion;
                        break;
                    }

                    _strLinkDePublicacion = ControlPublicacion.obtenerLinkPublicacion(_strIdDePublicacion);
                    lblEstado.Text += _strIdDePublicacion + " - Link: " + _strLinkDePublicacion;
                }
            }
            catch (Exception Ex)
            {
                lblEstado.Text = "Error reportado por MercadoLibre: " + Ex.Message;
            }
            finally
            {
                ControlImagen.BorrarCarpetaTemp();
            }
        }
        #endregion

        protected void eee(object sender, EventArgs e)
        {
            try
            {
                ControlLog.writeLog("Access token guardado = " + Request.QueryString[ControlSesion.AccessToken].ToString());

                ControlSesion.session(ControlSesion.AccessToken, Request.QueryString[ControlSesion.AccessToken].ToString());
                //Session[ControlSesion.AccessToken]=Request.QueryString[ControlSesion.AccessToken].ToString();
                lblEstado.Text = "Token Guardado " + ControlSesion.session(ControlSesion.AccessToken);//Session["access_token"];
            }
            catch (Exception ee)
            {
                lblEstado.Text = "Error guardando token = " + ee.Message;
                return;
            }
        }

        private static void InitProductoExportacion(int iCant)
        {
            prod_exportacion = new Product[iCant];
            prod_grilla = new TinyProd[iCant];
        }

        private static void InitProductoPublicacion(int iCant)
        {
            ControlLog.writeLog("[InitProductoPublicacion] Generando instancias para albergar productos = " + iCant.ToString());
            prod_publicacion = new ProductML[iCant];
            prod_grilla = new TinyProd[iCant];
        }





        #region ABM Competidores
        protected void btnProcesarCompetidor_Click(object sender, EventArgs e)
        {
            Parametros objParametro = new Parametros();
            DBMethods objConnection = new DBMethods();
            List<String> lstStrPathDeArchivos = new List<String>();
            List<Competidor> lstCompetidoresProcesados = new List<Competidor>();
            string strNickUsuario = "";
            objParametro.Productos = checkBoxProcesarProductos.Checked;
            objParametro.Calificaciones = checkBoxProcesarCalificaciones.Checked;

            if (listboxCompetidoresAProcesar.Items.Count == 0)
            {
                WebMsgBox.Show("Debe haber al menos un competidor en la lista de procesamiento");
                return;
            }

            if (objParametro.Productos || objParametro.Calificaciones)
            {

                try
                {
                    foreach (ListItem objItem in listboxCompetidoresAProcesar.Items)
                    {
                        Competidor objCompetidor = new Competidor();
                        string strIdML = objConnection.getIdMLCompetidor(objItem.Value).ToString();

                        objCompetidor = objConnection.getCompetidor(strIdML);
                        objCompetidor.refrescarEstadisticas();



                        lstCompetidoresProcesados.Add(objCompetidor);

                        Reporte.arrLstProductosAll = null;
                        Reporte.arrLstProductosNuevos = null;
                        Reporte.arrLstProductosNoEstan = null;
                        Reporte.arrLstProductosCambios = null;
                        Reporte.arrLstCalificacionesNuevas = null;
                        Reporte.lstCalificacion = new List<Calificacion>(); ;



                        if (objParametro.Productos)
                        {
                            #region Diferenciar Productos

                            try
                            {
                                Reporte.arrLstProductosAll = ControlCompetidorBO.ProcesarConsultaProductos(objCompetidor, null);

                                if (Reporte.arrLstProductosAll.Count > 0)
                                {
                                    Reporte.arrLstProductosNuevos = ControlCompetidorBO.BuscarProductosNuevos(Reporte.arrLstProductosAll, objItem.Value, null);
                                    Reporte.arrLstProductosCambios = ControlCompetidorBO.BuscarProductosConCambios(Reporte.arrLstProductosAll, null);
                                    Reporte.arrLstProductosNoEstan = ControlCompetidorBO.BuscarProductosNoEstan(Reporte.arrLstProductosAll, null);
                                }
                            }
                            catch (Exception ex)
                            {
                                ControlLog.writeLog("[btnProcesarCompetidor_Click] Error obteniendo productos: " + ex.Message);
                                throw ex;
                            }

                            #endregion

                        }
                        if (objParametro.Calificaciones)
                        {
                            #region Diferenciar Calificaciones
                            try
                            {

                                Reporte.arrLstCalificacionesNuevas = ControlCompetidorBO.ProcesarConsultaCalificaciones(objCompetidor, null, null);

                                for (int i = 0; i < Reporte.arrLstCalificacionesNuevas.Count; i++)
                                {
                                    Calificacion objCalificacion = null;
                                    objCalificacion = (Calificacion)Reporte.arrLstCalificacionesNuevas[i];
                                    objConnection.crearCalificacion(objCalificacion, objItem.Value);
                                }

                                Reporte.lstCalificacion = objConnection.getListaCalificacionesFK(objItem.Value);

                            }
                            catch (Exception ex)
                            {
                                ControlLog.writeLog("[btnProcesarCompetidor_Click] Error obteniendo Calificaciones: " + ex.Message);
                                throw ex;
                            }
                            #endregion
                        }

                        try
                        {
                            string[] strArrName = objItem.Text.Split(new char[] { ' ' });
                            /// Version 2.0.4.0
                            try
                            {
                                strArrName[0] = ControlReporte.validadorDeNombreDeArchivos(strArrName[0]);
                            }
                            catch (Exception ex)
                            {
                                ControlLog.writeLog("[btnProcesarCompetidor_Click] WARNING: El archivo ReporteDiferencial_" + strArrName[0] + ".xls produjo un error al validarlo: " + ex.Message);
                            }

                            try
                            {
                                File.Delete(MapPath("Competidores") + "\\" + strIdML + "\\ReporteDiferencial_" + strArrName[0] + ".xls");
                            }
                            catch (Exception ee)
                            {
                                ControlLog.writeLog("[btnProcesarCompetidor_Click] WARNING: No se pudo borrar el archivo ReporteDiferencial_" + strArrName[0] + ".xls. Se pocede con la operacion");
                            }

                            System.IO.StreamWriter file = new System.IO.StreamWriter(MapPath("Competidores") + "\\" + strIdML + "\\ReporteDiferencial_" + strArrName[0] + ".xls");

                            strNickUsuario = strArrName[0];

                            ControlReporte.exportarXLSReporteDiferencial(strArrName[0], objItem.Value,
                                                                            Reporte.arrLstProductosNuevos, Reporte.arrLstProductosNoEstan,
                                                                            Reporte.arrLstProductosCambios, Reporte.arrLstProductosAll, Reporte.arrLstCalificacionesNuevas, Reporte.lstCalificacion,
                                                                           objParametro).WriteTo(/*Response.OutputStream*/ file.BaseStream);

                            lstStrPathDeArchivos.Add("www.mymimportacionesweb.com.ar\\Competidores\\" + strIdML + "\\ReporteDiferencial_" + strArrName[0] + ".xls");
                            file.Close();



                        }
                        catch (Exception ex)
                        {
                            ControlLog.writeLog("[btnProcesarCompetidor_Click] Error armando el reporte: " + ex.Message);
                            throw ex;
                        }
                    }

                    string[] filePaths = Directory.GetFiles(MapPath("Competidores"));
                    foreach (string filePath in filePaths)
                        File.Delete(filePath);


                    #region Armado Reporte HTM

                    string strPathHTMFile = "Reporte.htm";
                    System.IO.StreamWriter objHTMFile = new System.IO.StreamWriter(MapPath("Competidores") + "\\" + strPathHTMFile);


                    ControlLog.writeLog("[btnProcesarCompetidor_Click] Archivos XLS procesados: " + lstStrPathDeArchivos.Count);



                    string sHeader = "<table width=1024px " + ControlReporte.estiloRojo() + " ><tr><td><table width=100%><tr align=center><td colspan=2 align=center><h1>Novedades del competidor COMPETENCIA</h1></td></tr>" +
                           "<tr><h1></h1></tr>" +
                           "<tr><td colspan=2 align=center><b> Programa Competidores - MYM IMPORTACIONES </b></td></tr>" +
                           "<tr><td>Archivos EXCEL de reportes:<td/><tr/>";


                    objHTMFile.Write(sHeader);



                    foreach (String strFile in lstStrPathDeArchivos)
                    {
                        ControlLog.writeLog("[btnProcesarCompetidor_Click] Agregando: <tr><td>" + strFile + "<br/></td></tr>");
                        objHTMFile.Write("<tr><td><a href=\"http://" + strFile + "\">" + strFile + "<a/><br/></td></tr>");
                    }


                    int intEstilo = 0;
                    foreach (Competidor objCompetidorProcesado in lstCompetidoresProcesados)
                    {
                        if (intEstilo < 3)
                        {
                            intEstilo++;
                        }
                        else
                        {
                            intEstilo = 0;
                        }

                        objHTMFile.Write(ControlReporte.procesarReporteTotalizadores(objCompetidorProcesado, intEstilo));
                    }


                    objHTMFile.Write("</table>");
                    objHTMFile.Close();

                    #endregion

                    FileInfo objFileInfo = new FileInfo(MapPath("Competidores") + "\\" + strPathHTMFile);

                    // Clear the content of the response
                    Response.ClearContent();

                    // LINE1: Add the file name and attachment, which will force the open/cance/save dialog to show, to the header
                    Response.AddHeader("Content-Disposition", "attachment; filename=" + objFileInfo.Name);

                    // Add the file size into the response header
                    Response.AddHeader("Content-Length", objFileInfo.Length.ToString());

                    // Set the ContentType
                    Response.ContentType = "application/vnd.ms-excel";

                    // Write the file into the response (TransmitFile is for ASP.NET 2.0. In ASP.NET 1.1 you have to use WriteFile instead)
                    Response.TransmitFile(objFileInfo.FullName);

                    // End the response
                    //Response.End();   //HZ v2.1.8.0
                    //HttpContext.Current.ApplicationInstance.CompleteRequest();      //HZ v2.1.6.0


                }
                catch (Exception ee)
                {
                    WebMsgBox.Show("Excepcion General armando reporte diferencial: " + ee.Message);
                    ControlLog.writeLog("[btnProcesarCompetidor_Click] Excepcion General armando reporte diferencial: " + ee.Message);
                    return;
                }
            }

            else
            {
                WebMsgBox.Show("Debe elegir al menos alguna de las opciones (PRODUCTO y/o CALIFICACION)");
                return;
            }
        }
        protected void buttonABMCompetidorAgregar_Click(object sender, EventArgs e)
        {
            DBMethods objConnection = new DBMethods();
            Competidor objCompetidor = new Competidor();

            int intDbIdCompetidor = 0;
            #region Validar Descripcion
            if (textBoxCompetidorDescripcion.Text == String.Empty)
            {
                objCompetidor.Descripcion = "";
            }
            else
            {

                objCompetidor.Descripcion = textBoxCompetidorDescripcion.Text;
            }
            #endregion
            #region Ingreso de NickName
            if (textBoxCompetidorNombre.Text == String.Empty)
            {
                WebMsgBox.Show("Debe ingresarse un valor válido de nombre de competidor");
                return;
            }
            objCompetidor.Nickname = textBoxCompetidorNombre.Text;
            #endregion
            #region Obtener Rubro
            try
            {
                objCompetidor.IdRubro = dropDownListRubrosDisponibles.SelectedItem.Value;
            }
            catch (Exception ee)
            {
                WebMsgBox.Show("Excepción obteniendo Rubro de Competidor: " + ee.Message);
                ControlLog.writeLog("[buttonABMCompetidorAgregar_Click] Excepción obteniendo Rubro de Competidor: " + ee.Message);
                return;
            }
            #endregion

            #region Averiguacion de Usuario

            try
            {
                if (ControlCompetidorBO.esNickValido(objCompetidor.Nickname) == false)
                {
                    WebMsgBox.Show("Nickname no existe en Mercado Libre. Verifique el nickname ingresado");
                    return;
                }

            }
            catch (Exception ee)
            {
                WebMsgBox.Show("Error al averiguar el nickname de usuario: " + ee.Message);
                ControlLog.writeLog("[buttonABMCompetidorAgregar_Click] Error al averiguar el nickname de usuario: " + ee.Message);
                return;
            }

            #endregion
            #region Obtencion del ID de ML
            try
            {
                objCompetidor.IdML = ControlCompetidorBO.getIdML(objCompetidor.Nickname);
            }
            catch (Exception ee)
            {
                WebMsgBox.Show("Error al conseguir el ID de usuario: " + ee.Message);
                ControlLog.writeLog("[buttonABMCompetidorAgregar_Click] Error al conseguir el ID de usuario: " + ee.Message);
                return;
            }
            #endregion
            #region Obtener Estadisticas Competidor
            try
            {
                objCompetidor.refrescarEstadisticas();
            }
            catch (Exception ee)
            {
                WebMsgBox.Show("Error al conseguir estadisticas de usuario: " + ee.Message);
                ControlLog.writeLog("[buttonABMCompetidorAgregar_Click] Error al conseguir estadisticas de usuario: " + ee.Message);
                return;

            }

            #endregion
            #region Agregar Link de Usuario
            try
            {
                objCompetidor.Link = ControlCompetidorBO.getLinkML(objCompetidor.IdML);
            }
            catch (Exception ee)
            {
                WebMsgBox.Show("Excepción obteniendo Link de Usuario ML: " + ee.Message);
                ControlLog.writeLog("[buttonABMCompetidorAgregar_Click] Excepción obteniendo Link de Usuario ML " + ee.Message);
                return;
            }
            #endregion
            #region Agregar Competidor
            try
            {
                if (objConnection.existeCompetidor(objCompetidor.IdML) == false)
                {
                    objConnection.crearCompetidor(objCompetidor);
                }
                else
                {
                    WebMsgBox.Show("Usuario ya existe en la Base de Datos");
                    ControlLog.writeLog("[buttonABMCompetidorAgregar_Click] Usuario ya existe en la Base de Datos");
                    return;
                }
            }
            catch (Exception ee)
            {
                WebMsgBox.Show("Error agregando Competidor: " + ee.Message);
                ControlLog.writeLog("[buttonABMCompetidorAgregar_Click] Error agregando Competidor:" + ee.Message);
                return;
            }

            #endregion
            #region Agregar Productos del Competidor
            try
            {
                intDbIdCompetidor = objConnection.getIdDbCompetidor(objCompetidor.IdML);
                ArrayList myAlProd = new ArrayList();
                myAlProd = ControlCompetidorBO.ProcesarConsultaProductos(objCompetidor, null);

                Producto objProducto = null;

                for (int i = 0; i < myAlProd.Count; i++)
                {
                    objProducto = new Producto();
                    objProducto = (Producto)myAlProd[i];
                    objConnection.crearProducto(objProducto, intDbIdCompetidor.ToString());
                    objProducto = null;
                }

            }
            catch (Exception ee)
            {
                WebMsgBox.Show("Error agregando Productos iniciales del Competidor: " + ee.Message);
                ControlLog.writeLog("[buttonABMCompetidorAgregar_Click] Error agregando Productos iniciales del Competidor:" + ee.Message);
                return;
            }
            #endregion
            #region Crear carpeta del competidor
            string sPath = MapPath("Competidores");
            try
            {
                ControlLog.writeLog("[buttonABMCompetidorAgregar_Click] Path de Carpeta a crear para el competidor " + sPath + "\\" + objCompetidor.IdML);
                System.IO.Directory.CreateDirectory(sPath + "\\" + objCompetidor.IdML);
            }
            catch (Exception ee)
            {
                WebMsgBox.Show("Error generando carpeta de Competidor: " + ee.Message);
                ControlLog.writeLog("[buttonABMCompetidorAgregar_Click] Error generando carpeta de Competidor: " + ee.Message);
                return;

            }
            #endregion
            #region Obtener Calificaciones
            try
            {
                Reporte.arrLstProductosAll = new ArrayList();
                Reporte.arrLstProductosNuevos = new ArrayList();



                ArrayList arrLstCalificaciones;
                Calificacion objCalificacion = null;
                arrLstCalificaciones = ControlCompetidorBO.ProcesarConsultaCalificaciones(objCompetidor, textBoxCantidadMaximaDeCalificaciones.Text, null);

                if (arrLstCalificaciones != null)
                {

                    for (int i = 0; i < arrLstCalificaciones.Count; i++)
                    {
                        objCalificacion = (Calificacion)arrLstCalificaciones[i];

                        objConnection.crearCalificacion(objCalificacion, intDbIdCompetidor.ToString());
                        objCalificacion = null;
                    }
                }
                /*
                #region Agregar Productos Nuevos descubiertos en calificaciones
                
                Producto objProducto = null;

                if (Reporte.arrLstProductosNuevos.Count > 0)
                {
                    ControlLog.writeLog("[buttonABMCompetidorAgregar_Click] Agregando " + Reporte.arrLstProductosNuevos.Count.ToString() + " productos nuevos descubiertos en las calificaciones");
             
                }

                for (int i = 0; i < Reporte.arrLstProductosNuevos.Count; i++)
                {
                    objProducto = new Producto();
                    objProducto = (Producto)Reporte.arrLstProductosNuevos[i];
                    objConnection.crearProducto(objProducto, intDbIdCompetidor.ToString());
                    objProducto = null;
                }
                #endregion
                */

                Reporte.arrLstProductosAll = null;
                Reporte.arrLstProductosNuevos = null;
            }
            catch (Exception ee)
            {
                WebMsgBox.Show("Error agregando calificaciones de Competidor: " + ee.Message);
                ControlLog.writeLog("[buttonABMCompetidorAgregar_Click] Error agregando calificaciones de Competidor: " + ee.Message);
                return;
            }
            #endregion



            listboxCompetidoresDisponibles.DataBind();
            listboxCompetidoresSeguidos.DataBind();
            WebMsgBox.Show("Competidor " + objCompetidor.Nickname + " agregado OK!");
            ControlLog.writeLog("[buttonABMCompetidorAgregar_Click] Competidor " + objCompetidor.Nickname + " agregado OK!");
            return;
        }
        protected void buttonABMCompetidorBorrar_Click(object sender, EventArgs e)
        {
            DBMethods objConnection = new DBMethods();
            int intIdMlCompetidor = 0;

            if (listboxCompetidoresSeguidos.SelectedIndex == -1)
            {
                WebMsgBox.Show("Debe elegir un solo competidor de la lista antes de borrarlo");
                return;
            }

            try
            {
                intIdMlCompetidor = objConnection.getIdMLCompetidor(listboxCompetidoresSeguidos.SelectedItem.Value);
                objConnection.borrarCompetidor(Convert.ToInt32(listboxCompetidoresSeguidos.SelectedItem.Value));
                objConnection.borrarProductoDeCompetidor(listboxCompetidoresSeguidos.SelectedItem.Value);
                objConnection.borrarCalificacion(listboxCompetidoresSeguidos.SelectedItem.Value);
                #region Borrar carpeta del competidor
                string sPath = MapPath("Competidores");
                try
                {
                    ControlLog.writeLog("[buttonABMCompetidorBorrar_Click] Path de Carpeta a eliminar " + sPath + "\\" + intIdMlCompetidor.ToString());
                    System.IO.Directory.Delete(sPath + "\\" + intIdMlCompetidor.ToString(), true);

                }
                catch (Exception ee)
                {
                    WebMsgBox.Show("Error generando carpeta de Competidor: " + ee.Message);
                    ControlLog.writeLog("[buttonABMCompetidorBorrar_Click] Error eliminando carpeta de Competidor: " + ee.Message);
                    return;

                }
                #endregion

            }
            catch (Exception ee)
            {
                WebMsgBox.Show("Error borrando competidor: " + ee.Message);
                return;
            }

            listboxCompetidoresDisponibles.DataBind();
            listboxCompetidoresSeguidos.DataBind();
            listboxCompetidoresAProcesar.DataBind();

            WebMsgBox.Show("Competidor eliminado OK!");
            return;

        }
        #endregion

        #region ABM Rubros

        protected void btnABMRubrosAgregar_Click(object sender, EventArgs e)
        {
            DBMethods objMyConnection = new DBMethods();
            Rubro objNuevoRubro = new Rubro();
            string strDescripcion;
            strDescripcion = textBoxRubroDescripcion.Text;
            if (strDescripcion == "")
            {
                WebMsgBox.Show("Ingrese una descripcion de rubro valida");
            }
            else
            {
                objNuevoRubro.Nombre = strDescripcion;
                ControlLog.writeLog("[btnABMRubrosBorrar_Click] Agregando rubro: " + objNuevoRubro.Nombre);
                objMyConnection.crearRubro(objNuevoRubro);
                ///TODO
                listboxRubrosSeguidos.DataBind();
                dropDownListRubrosDisponibles.DataBind();
                WebMsgBox.Show("Rubro agregado OK");
            }


        }

        protected void btnABMRubrosBorrar_Click(object sender, EventArgs e)
        {
            int intIdRubro;
            DBMethods objMyConnection = new DBMethods();
            try
            {
                //   ControlLog.writeLog("Rows" + listboxRubrosSeguidos.Rows.ToString());
                //   ControlLog.writeLog("Index" + listboxRubrosSeguidos.SelectedIndex.ToString());
                //   ControlLog.writeLog("Value" + listboxRubrosSeguidos.SelectedValue.ToString());


                intIdRubro = Convert.ToInt32(listboxRubrosSeguidos.SelectedItem.Value);


            }
            catch (Exception ee)
            {
                ControlLog.writeLog("[btnABMRubrosBorrar_Click] Error borrando rubro: " + ee.Message);
                WebMsgBox.Show("Error: " + ee.Message);
                return;
            }

            objMyConnection.borrarRubro(intIdRubro);
            listboxRubrosSeguidos.DataBind();
            dropDownListRubrosDisponibles.DataBind();
            WebMsgBox.Show("Rubro Borrado OK");
        }


        #endregion

        protected void btnAgregarCompetidorAlProceso_Click(object sender, EventArgs e)
        {
            DBMethods objConnection = new DBMethods();

            if (listboxCompetidoresDisponibles.SelectedIndex != -1)
            {
                objConnection.agregarCompetidorAProcesar(Convert.ToInt32(listboxCompetidoresDisponibles.SelectedItem.Value));
                listboxCompetidoresAProcesar.DataBind();
                listboxCompetidoresDisponibles.DataBind();
            }
            else
            {
                WebMsgBox.Show("Debe seleccionarse un competidor de la lista de competidores disponibles");
            }

        }
        protected void btnQuitarCompetidorAlProceso_Click(object sender, EventArgs e)
        {
            DBMethods objConnection = new DBMethods();

            if (listboxCompetidoresAProcesar.SelectedIndex != -1)
            {
                objConnection.quitarCompetidorAProcesar(Convert.ToInt32(listboxCompetidoresAProcesar.SelectedItem.Value));
                listboxCompetidoresAProcesar.DataBind();
                listboxCompetidoresDisponibles.DataBind();
            }
            else
            {
                WebMsgBox.Show("Debe seleccionarse un competidor de la lista de competidores a procesar");
            }
        }
        protected void buttonBajarPerfilActual_Click(object sender, EventArgs e)
        {
            string sPath = MapPath("Temp_CSV");

            if (listboxCompetidoresSeguidos.SelectedIndex == -1)
            {
                WebMsgBox.Show("Debe elegir un competidor de la lista, antes de ver su perfil actual");
                return;
            }

            try
            {
                string[] strArrNickNameCompetidor = listboxCompetidoresSeguidos.SelectedItem.Text.Split(new char[] { ' ' });
                Response.Clear();
                Response.ContentType = "application/vnd.ms-excel";
                Response.AddHeader("content-disposition", "attachment;filename=ReportePerfil_" + strArrNickNameCompetidor[0] + ".xls");

                ControlReporte.exportarXLSPerfil(strArrNickNameCompetidor[0], listboxCompetidoresSeguidos.SelectedItem.Value).WriteTo(Response.OutputStream);
                // Response.End();	 //HZ v2.1.8.0
                //HttpContext.Current.ApplicationInstance.CompleteRequest();      //HZ v2.1.6.0
            }
            catch (Exception ee)
            {
                WebMsgBox.Show("Error generando perfil actual del usuario: " + ee.Message);
                ControlLog.writeLog("[buttonBajarPerfilActual_Click] Error generando perfil actual del usuario: " + ee.Message);
                return;
            }



        }
        protected void btnCerrarMensajeGeneral_Click(object sender, EventArgs e)
        {
            panelMensajesGenerales.Visible = false;
        }
        protected void btnBajarUltimoReporte_Click(object sender, EventArgs e)
        {
            string sPath = MapPath("Competidores");
            string sDest;

            sDest = sPath + "\\" + "Reporte.htm";

            // Create New instance of FileInfo class to get the properties of the file being downloaded
            FileInfo file = new FileInfo(sDest);

            // Checking if file exists
            if (file.Exists)
            {
                // Clear the content of the response
                Response.ClearContent();

                // LINE1: Add the file name and attachment, which will force the open/cance/save dialog to show, to the header
                Response.AddHeader("Content-Disposition", "attachment; filename=" + file.Name);

                // Add the file size into the response header
                Response.AddHeader("Content-Length", file.Length.ToString());

                // Set the ContentType
                Response.ContentType = "application/vnd.ms-excel";

                // Write the file into the response (TransmitFile is for ASP.NET 2.0. In ASP.NET 1.1 you have to use WriteFile instead)
                Response.TransmitFile(file.FullName);

                // End the response
                //Response.End();   //HZ v2.1.8.0
                //HttpContext.Current.ApplicationInstance.CompleteRequest();      //HZ v2.1.6.0
            }
        }


        protected void btnCerrarSesion_Click(object sender, EventArgs e)
        {
            ControlSesion.session(ControlSesion.UsuarioLogin, "");
            ControlSesion.session("PasswordLogin", "");

            Response.Redirect("login.aspx?msg=1", false);
        }
        protected void btnRefrescar_Click(object sender, EventArgs e)
        {
            Response.Redirect("default.aspx", false);
        }
        protected void btnComenzarWebScrawling_click(object sender, EventArgs e)
        {
            if (txtUrlWebScrawling.Text != String.Empty)
            {
                this.DoWebScrawling(txtUrlWebScrawling.Text);
            }
            else
            {
                WebMsgBox.Show("Por favor especifique una URL de la página http://www.musiciansfriend.com");
                ControlLog.writeLog("[btnComenzarWebScrawling_click] No hay URL valida");
            }
        }

        private void DoWebScrawling(string strUrlParam)
        {

            try
            {
                #region Primera ETAPA

                int intCant = 0, intPage;
                string strPath = MapPath("Temp_CSV");
                string strDest, strFileName, strPage, strCant, strUrl;
                List<Product> lstExportacionProductos = new List<Product>();

                try
                {
                    if (!strUrlParam.Contains("&pS="))
                        strUrlParam += "#fT=&gP=1&pS=60&v=g&sB=bS&lP=c&catId=site1YJD";

                    intCant = Convert.ToInt32(strUrlParam.Substring(strUrlParam.IndexOf("&pS=") + 4, 2));
                    strCant = "&pS=" + intCant.ToString();

                    strPage = "?gP=" + strUrlParam.Substring(strUrlParam.IndexOf("&gP=") + 4, 1);
                    intPage = Convert.ToInt32(strUrlParam.Substring(strUrlParam.IndexOf("&gP=") + 4, 1));

                    strUrl = strUrlParam.Substring(0, strUrlParam.IndexOf('#')) + strPage + strCant;


                    lstExportacionProductos = (List<Product>)ControlHTML.DoCatalogProcess(strUrl);


                    strFileName = ControlCSV.CrearNombreCSV(strUrlParam);
                    strDest = strPath + "\\" + strFileName + ".csv";

                    ControlCSV.SaveChangesInCsv(lstExportacionProductos, strDest);

                    ControlLog.writeLog("[DoWebScrawling] Proceso OK, listo para descarga. Productos " + (intCant * intPage - intCant + 1).ToString() + " a " + (intCant * intPage - intCant + lstExportacionProductos.Count).ToString() + " exportados.");


                }
                catch (Exception Ex)
                {
                    ControlLog.writeLog("[DoWebScrawling] Excepcion en la primera ETAPA del webScrawling: " + Ex.Message);
                    throw Ex;
                }

                #endregion
                #region Segunda ETAPA

                // Create New instance of FileInfo class to get the properties of the file being downloaded
                FileInfo objFile = new FileInfo(strDest);

                // Checking if file exists
                if (objFile.Exists)
                {
                    // Clear the content of the response
                    Response.ClearContent();

                    // LINE1: Add the file name and attachment, which will force the open/cance/save dialog to show, to the header
                    Response.AddHeader("Content-Disposition", "attachment; filename=" + objFile.Name);

                    // Add the file size into the response header
                    Response.AddHeader("Content-Length", objFile.Length.ToString());

                    // Set the ContentType
                    Response.ContentType = "application/vnd.ms-excel";

                    // Write the file into the response (TransmitFile is for ASP.NET 2.0. In ASP.NET 1.1 you have to use WriteFile instead)
                    Response.TransmitFile(objFile.FullName);

                    // End the response
                    //Response.End();   //HZ v2.1.8.0
                    //HttpContext.Current.ApplicationInstance.CompleteRequest();      //HZ v2.1.6.0
                }
                else
                {
                    ControlLog.writeLog("[DoWebScrawling] ERROR: El archivo " + strDest + " no existe. No se procede al download del archivo..");
                }

                #endregion
            }
            catch (Exception ex)
            {
                ControlLog.writeLog("[DoWebScrawling] Excepcion en general en webScrawling: " + ex.Message);
                WebMsgBox.Show("Excepcion en general en webScrawling: " + ex.Message);

            }

        }
        #region Modificaciones en Masa
        protected void btnModificacionesEnMasa_Click(object sender, EventArgs e)
        {
           


        }
        protected void btnAgregarReglaExclusiones_Click(object sender, EventArgs e)
        {
            ReglasExclusion newRule = new ReglasExclusion(ReglasExclusion.ReglaTipo_NoEsIgualA, ReglasExclusion.Conector_And, "CRITERIO");
            DBMethods conn = new DBMethods();
            conn.AgregarReglaDeExclusion(ControlSesion.session(ControlSesion.UsuarioLogin), newRule);
            ReglasExclusionDS.DataBind();
            GridViewReglasExclusion.DataBind();

        }
        protected void ReglasExclusionDS_Deleting(object sender, ObjectDataSourceMethodEventArgs e)
        {
            e.Cancel = true;
            var regla = (ReglasExclusion)e.InputParameters[0];
            ControlLog.writeLog("[ReglasExclusionDS_Deleting] Borrando Regla Id =  " + regla.IdRegla + " Criterio = " + regla.Criterio);
            ControlModificacionDePrecios handler = new ControlModificacionDePrecios();
            handler.BorrarReglaDeExclusion(regla);

        }
        protected void ReglasExclusionDS_Updating(object sender, ObjectDataSourceMethodEventArgs e)
        {
            e.Cancel = true;
            var regla = (ReglasExclusion)e.InputParameters[0];
            ControlLog.writeLog("[ReglasExclusionDS_Updating] Actualizando Regla Id =  " + regla.IdRegla + " Criterio = " + regla.Criterio + " Tipo =" + regla.Tipo + " Conector =" + regla.Conector);
            ControlModificacionDePrecios handler = new ControlModificacionDePrecios();
            handler.ModificarReglaDeExclusion(regla);
        }
        protected void ReglasExclusionDS_Selecting(object sender, ObjectDataSourceSelectingEventArgs e)
        {

        }
        protected void ReglasExclusionDS_Selected(object sender, ObjectDataSourceStatusEventArgs e)
        {


        }
        protected void btnCalcularModificaciones_Click(object sender, EventArgs e)
        {
            try
            {
                ControlModificacionDePrecios handler = new ControlModificacionDePrecios();
                handler.CargarReglas(ReglasExclusionDS.Select());
                if (chkboxCotizacion.Checked == true)
                {
                    handler.CargarDiferenciaDeCotizacionAAplicar(txtCotOriginal.Text, txtCotNueva.Text);
                }
                if (chkboxPorcentaje.Checked == true)
                {
                    handler.CargarPorcentajeAAplicar(txtPorcentaje.Text);
                }
                if (chkboxIgualitario.Checked == true)
                {
                    handler.CargarIgualitarioAAplicar(txtIgualitario.Text);
                }
                if (chkboxCotizacion.Checked == false && chkboxPorcentaje.Checked == false && chkboxIgualitario.Checked == false)
                {
                    WebMsgBox.Show("Debe cargar al menos un criterio de modificación para poder realizar el calculo");
                }
                else
                {
                    handler.ConfigurarReintentos(ddlReintentosModificacionesDePrecios.SelectedValue, ddlSeparacionReintentosModificacionesDePrecios.SelectedValue);

                    try
                    {
                        ControlCalculoModificacionDePreciosAsyncHandler objAsyncHandler = new ControlCalculoModificacionDePreciosAsyncHandler();
                        objAsyncHandler.BeginProcessRequest(HttpContext.Current, null, handler);

                        ControlLog.writeLog("[btnCalcularModificaciones_Click] Thread de calculo de items a modificar lanzado OK");
                    }
                    catch (ModificacionDePreciosException innerModDePreciosEx)
                    {
                        ControlLog.writeLog("[btnCalcularModificaciones_Click] Excepcion 1 calculando la modificacion de precios: " + innerModDePreciosEx.Message);
                    }
                    catch (Exception innerEx)
                    {
                        ControlLog.writeLog("[btnCalcularModificaciones_Click] Excepcion 2 general calculando la modificacion de precios: " + innerEx.Message);

                    }
                }

            }
            catch (ModificacionDePreciosException imEx)
            {
                ControlLog.writeLog("[btnCalcularModificaciones_Click] Excepcion calculando la modificacion de precios: " + imEx.Message);
                WebMsgBox.Show(imEx.Message);
            }
            catch (Exception ex)
            {
                ControlLog.writeLog("[btnCalcularModificaciones_Click] Excepcion 2 general calculando la modificacion de precios: " + ex.Message);
                WebMsgBox.Show(ex.Message);

            }
        }
        protected void btnProcesarModificaciones_Click(object sender, EventArgs e)
        {
            try
            {
                ControlModificacionDePrecios handler = new ControlModificacionDePrecios();
                handler.ConfigurarReintentos(ddlReintentosModificacionesDePrecios.SelectedValue, ddlSeparacionReintentosModificacionesDePrecios.SelectedValue);

                try
                {
                    ControlImpactoModificacionDePreciosAsyncHandler objAsyncHandler = new ControlImpactoModificacionDePreciosAsyncHandler();
                    objAsyncHandler.BeginProcessRequest(HttpContext.Current, null, handler);

                    ControlLog.writeLog("[btnProcesarModificaciones_Click] Thread de impacto de items a modificar lanzado OK");
                }
                catch (ModificacionDePreciosException innerModDePreciosEx)
                {
                    ControlLog.writeLog("[btnProcesarModificaciones_Click] Excepcion 1 impactando la modificacion de precios: " + innerModDePreciosEx.Message);
                }
                catch (Exception innerEx)
                {
                    ControlLog.writeLog("[btnProcesarModificaciones_Click] Excepcion 2 general impactando la modificacion de precios: " + innerEx.Message);
                }


            }
            catch (ModificacionDePreciosException imEx)
            {
                ControlLog.writeLog("[btnCalcularModificaciones_Click] Excepcion impactando la modificacion de precios: " + imEx.Message);
                WebMsgBox.Show(imEx.Message);
            }
            catch (Exception ex)
            {
                ControlLog.writeLog("[btnCalcularModificaciones_Click] Excepcion 2 general impactando la modificacion de precios: " + ex.Message);
                WebMsgBox.Show(ex.Message);

            }
        }
        protected void btnVerModificacionesDePreciosPendientes_Click(object sender, EventArgs e)
        {
            string path = MapPath("Temp_CSV");


            try
            {
                Response.Clear();
                Response.ContentType = "application/vnd.ms-excel";
                Response.AddHeader("content-disposition", "attachment;filename=ReporteModificacionesPendientes_"
                                    + System.DateTime.Now.Day.ToString().PadLeft(2, '0')
                                    + System.DateTime.Now.Month.ToString().PadLeft(2, '0')
                                    + System.DateTime.Now.Year.ToString().PadLeft(4, '0')
                                    + System.DateTime.Now.Hour.ToString().PadLeft(2, '0')
                                    + System.DateTime.Now.Minute.ToString().PadLeft(2, '0')
                                    + System.DateTime.Now.Second.ToString().PadLeft(2, '0')
                                    + ".xls");
                ControlReporte.ExportarModificacionesPendientes().WriteTo(Response.OutputStream);
                // Response.End();	 //HZ v2.1.8.0
                //HttpContext.Current.ApplicationInstance.CompleteRequest();      //HZ v2.1.6.0
            }
            catch (Exception ee)
            {
                WebMsgBox.Show("Error generando reporte de modificaciones de precios pendientes: " + ee.Message);
                ControlLog.writeLog("[btnVerModificacionesDePreciosPendientes_Click] Error generando reporte de modificaciones de precios pendientes: " + ee.Message);
                return;
            }
        }
        protected void btnBorrarModificacionesDePreciosPendientes_Click(object sender, EventArgs e)
        {
            try
            {
                DBMethods conn = new DBMethods();
                conn.LimpiarItemsModificacionesDePreciosPendientes(ControlSesion.session(ControlSesion.UsuarioLogin));
                WebMsgBox.Show("Items pendientes de modificacion eliminados correctamente");
            }
            catch (Exception ee)
            {
                ControlLog.writeLog("[btnBorrarModificacionesDePreciosPendientes_Click] EXCEPCION eliminando productos pendientes de modificacion: " + ee.Message);
            }

        }
        #endregion
        /*    protected void btnVerProductosPublicadosOK(object sender, EventArgs e)
        {
            DBMethods objConnection = new DBMethods();
            try
            {

                string[] filePaths = Directory.GetFiles(MapPath("Publicaciones"));
                foreach (string filePath in filePaths)
                    File.Delete(filePath);

                string strPathHTMFile = "ProductosPublicadosOK.htm";
                System.IO.StreamWriter objHTMFile = new System.IO.StreamWriter(MapPath("Publicaciones") + "\\" + strPathHTMFile);

                string sHeader = "<table width=10000px " + ControlReporte.estiloRojo() + " ><tr><td><table width=100%><tr align=center><td colspan=2 align=center><h1></h1></td></tr>" + "<tr><h1></h1></tr>" +
                       "<tr><td align=center><b> Productos Publicados OK - MYM IMPORTACIONES </b></td></tr>" +
                       "";

                objHTMFile.Write(sHeader);

                objHTMFile.Write("<tr valign=\"Top\"><td><table border=1>");
                objHTMFile.Write("<tr>" +
                                 "<td width=\"400px\"><b>Titulo</b></td>" +
                                 "<td width=\"400px\"><b>ID Ml</b></td>" +
                                 "<td width=\"400px\"><b>Link de Publicacion</b></td>" +
                                 "<td width=\"400px\"><b>Errores encontrados</b></td>" +
                                 "</tr>");

                foreach (ControlPublicacionProductoML objProducto in objConnection.obtenerPublicacionesOk(ControlSesion.session(ControlSesion.UsuarioLogin)))
                {
                    objHTMFile.Write(objProducto.ToString());

                }
                objHTMFile.Write("</table></td></tr>");

                objHTMFile.Write("</table>");
                objHTMFile.Close();


                FileInfo objFileInfo = new FileInfo(MapPath("Publicaciones") + "\\" + strPathHTMFile);

                // Clear the content of the response
                Response.ClearContent();

                // LINE1: Add the file name and attachment, which will force the open/cance/save dialog to show, to the header
                Response.AddHeader("Content-Disposition", "attachment; filename=" + objFileInfo.Name);

                // Add the file size into the response header
                Response.AddHeader("Content-Length", objFileInfo.Length.ToString());

                // Set the ContentType
                //Response.ContentType = "application/vnd.ms-excel";
                Response.ContentType = "text/html";

                // Write the file into the response (TransmitFile is for ASP.NET 2.0. In ASP.NET 1.1 you have to use WriteFile instead)
                Response.TransmitFile(objFileInfo.FullName);

                // End the response
                //Response.End(); //HZ v2.1.8.0
                //HttpContext.Current.ApplicationInstance.CompleteRequest();      //HZ v2.1.6.0


            }
            catch (Exception ee)
            {
                WebMsgBox.Show("Excepcion General armando reporte de publicaciones OK: " + ee.Message);
                ControlLog.writeLog("[btnVerProductosPublicadosOK] Excepcion General armando reporte de publicaciones OK: " + ee.Message);
                return;
            }
        }*/
        //protected void btnVerProductosPublicadosKO(object sender, EventArgs e)
        //{
        //    DBMethods objConnection = new DBMethods();

        //    try
        //    {

        //        string[] filePaths = Directory.GetFiles(MapPath("Publicaciones"));
        //        foreach (string filePath in filePaths)
        //            File.Delete(filePath);

        //        string strPathHTMFile = "ProductosPublicadosKO.htm";
        //        System.IO.StreamWriter objHTMFile = new System.IO.StreamWriter(MapPath("Publicaciones") + "\\" + strPathHTMFile);

        //        string sHeader = "<table width=10000px " + ControlReporte.estiloRojo() + " ><tr><td><table width=100%><tr align=center><td colspan=2 align=center><h1></h1></td></tr>" + "<tr><h1></h1></tr>" +
        //               "<tr><td align=center><b> Productos Publicados Con ERRORES - MYM IMPORTACIONES </b></td></tr>" +
        //               "";

        //        objHTMFile.Write(sHeader);

        //        objHTMFile.Write("<tr valign=\"Top\"><td><table border=1>");
        //        objHTMFile.Write("<tr>" +
        //                         "<td width=\"400px\"><b>Titulo</b></td>" +
        //                         "<td width=\"400px\"><b>ID Ml</b></td>" +
        //                         "<td width=\"400px\"><b>Link de Publicacion</b></td>" +
        //                         "<td width=\"400px\"><b>Errores encontrados</b></td>" +
        //                         "</tr>");

        //        foreach (ControlPublicacionProductoML objProducto in objConnection.obtenerPublicacionesKo(ControlSesion.session(ControlSesion.UsuarioLogin)))
        //        {
        //            objHTMFile.Write(objProducto.ToString());

        //        }
        //        objHTMFile.Write("</table></td></tr>");

        //        objHTMFile.Write("</table>");
        //        objHTMFile.Close();


        //        FileInfo objFileInfo = new FileInfo(MapPath("Publicaciones") + "\\" + strPathHTMFile);

        //        // Clear the content of the response
        //        Response.ClearContent();

        //        // LINE1: Add the file name and attachment, which will force the open/cance/save dialog to show, to the header
        //        Response.AddHeader("Content-Disposition", "attachment; filename=" + objFileInfo.Name);

        //        // Add the file size into the response header
        //        Response.AddHeader("Content-Length", objFileInfo.Length.ToString());

        //        // Set the ContentType
        //        //Response.ContentType = "application/vnd.ms-excel";
        //        Response.ContentType = "text/html";

        //        // Write the file into the response (TransmitFile is for ASP.NET 2.0. In ASP.NET 1.1 you have to use WriteFile instead)
        //        Response.TransmitFile(objFileInfo.FullName);

        //        // End the response
        //        //Response.End(); //HZ v2.1.8.0
        //        //HttpContext.Current.ApplicationInstance.CompleteRequest();      //HZ v2.1.6.0


        //    }
        //    catch (Exception ee)
        //    {
        //        WebMsgBox.Show("Excepcion General armando reporte de publicaciones KO: " + ee.Message);
        //        ControlLog.writeLog("[btnVerProductosPublicadosOK] Excepcion General armando reporte de publicaciones KO: " + ee.Message);
        //        return;
        //    }
        //}
        protected void btnVerProductosPublicadosKO(object sender, EventArgs e)
        {
            string path = MapPath("Publicaciones");

            try
            {
                Response.Clear();
                Response.ContentType = "application/vnd.ms-excel";
                Response.AddHeader("content-disposition", "attachment;filename=ProductosPublicadosKO_"
                                    + System.DateTime.Now.Day.ToString().PadLeft(2, '0')
                                    + System.DateTime.Now.Month.ToString().PadLeft(2, '0')
                                    + System.DateTime.Now.Year.ToString().PadLeft(4, '0')
                                    + System.DateTime.Now.Hour.ToString().PadLeft(2, '0')
                                    + System.DateTime.Now.Minute.ToString().PadLeft(2, '0')
                                    + System.DateTime.Now.Second.ToString().PadLeft(2, '0')
                                    + ".xls");
                ControlReporte.ExportarProductosPublicadosKo().WriteTo(Response.OutputStream);

            }
            catch (Exception ee)
            {
                WebMsgBox.Show("Error generando reporte de productos publicados KO: " + ee.Message);
                ControlLog.writeLog("[btnVerProductosPublicadosKO] Error generando reporte de productos publicados KO: " + ee.Message);
                return;
            }
        }
        protected void btnVerProductosPublicadosOK(object sender, EventArgs e)
        {
            string path = MapPath("Publicaciones");
         
            try
            {
                Response.Clear();
                Response.ContentType = "application/vnd.ms-excel";
                Response.AddHeader("content-disposition", "attachment;filename=ProductosPublicadosOK_"
                                    + System.DateTime.Now.Day.ToString().PadLeft(2, '0')
                                    + System.DateTime.Now.Month.ToString().PadLeft(2, '0')
                                    + System.DateTime.Now.Year.ToString().PadLeft(4, '0')
                                    + System.DateTime.Now.Hour.ToString().PadLeft(2, '0')
                                    + System.DateTime.Now.Minute.ToString().PadLeft(2, '0')
                                    + System.DateTime.Now.Second.ToString().PadLeft(2, '0')
                                    + ".xls");
                ControlReporte.ExportarProductosPublicadosOk().WriteTo(Response.OutputStream);
                
            }
            catch (Exception ee)
            {
                WebMsgBox.Show("Error generando reporte de productos publicados OK: " + ee.Message);
                ControlLog.writeLog("[btnVerProductosPublicadosOK] Error generando reporte de productos publicados OK: " + ee.Message);
                return;
            }
        }

        protected void btnVerModificacionesDePreciosOk_Click(object sender, EventArgs e)
        {
            string path = MapPath("Temp_CSV");


            try
            {
                Response.Clear();
                Response.ContentType = "application/vnd.ms-excel";
                Response.AddHeader("content-disposition", "attachment;filename=ReporteModificacionesOK_"
                                    + System.DateTime.Now.Day.ToString().PadLeft(2, '0')
                                    + System.DateTime.Now.Month.ToString().PadLeft(2, '0')
                                    + System.DateTime.Now.Year.ToString().PadLeft(4, '0')
                                    + System.DateTime.Now.Hour.ToString().PadLeft(2, '0')
                                    + System.DateTime.Now.Minute.ToString().PadLeft(2, '0')
                                    + System.DateTime.Now.Second.ToString().PadLeft(2, '0')
                                    + ".xls");
                ControlReporte.ExportarModificacionesOk().WriteTo(Response.OutputStream);
                // Response.End();	 //HZ v2.1.8.0
                //HttpContext.Current.ApplicationInstance.CompleteRequest();      //HZ v2.1.6.0
            }
            catch (Exception ee)
            {
                WebMsgBox.Show("Error generando reporte de items modificados OK: " + ee.Message);
                ControlLog.writeLog("[btnVerModificacionesDePreciosOk_Click] Error generando reporte de items modificados OK: " + ee.Message);
                return;
            }
        }
        protected void btnVerModificacionesDePreciosKo_Click(object sender, EventArgs e)
        {
            string path = MapPath("Temp_CSV");


            try
            {
                Response.Clear();
                Response.ContentType = "application/vnd.ms-excel";
                Response.AddHeader("content-disposition", "attachment;filename=ReporteModificacionesKO_"
                                    + System.DateTime.Now.Day.ToString().PadLeft(2, '0')
                                    + System.DateTime.Now.Month.ToString().PadLeft(2, '0')
                                    + System.DateTime.Now.Year.ToString().PadLeft(4, '0')
                                    + System.DateTime.Now.Hour.ToString().PadLeft(2, '0')
                                    + System.DateTime.Now.Minute.ToString().PadLeft(2, '0')
                                    + System.DateTime.Now.Second.ToString().PadLeft(2, '0')
                                    + ".xls");
                ControlReporte.ExportarModificacionesKo().WriteTo(Response.OutputStream);
                // Response.End();	 //HZ v2.1.8.0
                //HttpContext.Current.ApplicationInstance.CompleteRequest();      //HZ v2.1.6.0
            }
            catch (Exception ee)
            {
                WebMsgBox.Show("Error generando reporte de items modificados KO: " + ee.Message);
                ControlLog.writeLog("[btnVerModificacionesDePreciosKo_Click] Error generando reporte de items modificados KO: " + ee.Message);
                return;
            }
        }
        protected void btnBorrarModificacionesDePreciosOk_Click(object sender, EventArgs e)
        {
            try
            {
                DBMethods conn = new DBMethods();
                conn.LimpiarItemsModificacionesDePreciosPendientesOk(ControlSesion.session(ControlSesion.UsuarioLogin));
                WebMsgBox.Show("Items modificados OK eliminados correctamente");
            }
            catch (Exception ee)
            {
                ControlLog.writeLog("[btnBorrarModificacionesDePreciosOk_Click] EXCEPCION eliminando productos modificados OK: " + ee.Message);
            }
        }
        protected void btnBorrarModificacionesDePreciosKo_Click(object sender, EventArgs e)
        {
            try
            {
                DBMethods conn = new DBMethods();
                conn.LimpiarItemsModificacionesDePreciosPendientesKo(ControlSesion.session(ControlSesion.UsuarioLogin));
                WebMsgBox.Show("Items modificados KO eliminados correctamente");
            }
            catch (Exception ee)
            {
                ControlLog.writeLog("[btnBorrarModificacionesDePreciosKo_Click] EXCEPCION eliminando productos modificados KO: " + ee.Message);
            }
        }
}
    #endregion
}
